• 
    <sub id="wrhg3"><s id="wrhg3"><li id="wrhg3"></li></s></sub>
    <style id="wrhg3"></style><legend id="wrhg3"><track id="wrhg3"></track></legend>
  • <blockquote id="wrhg3"><p id="wrhg3"></p></blockquote>

    <cite id="wrhg3"><li id="wrhg3"></li></cite>

    国产线路3国产线路2,久久国产亚洲精品赲碰热,亚洲成人日韩av一区,永久免费观看的毛片视频下载,精品久久杨幂国产杨幂,国产成 人 综合 亚洲网,亚洲夫妻性生活视频网站,176精品免费
    您好,歡迎進(jìn)入北京泰福特電子科技有限公司官網(wǎng)

    咨詢服務(wù)熱線

    400-015-1230

    Linux下GDB調(diào)試NTP時間同步問題

    發(fā)布時間:2022-04-11 15:48:59

      最近有遇到一例比較有趣的Linux下NTP時間同步問題,嘗試了使用GDB調(diào)試的方法解決,在這里分享一些個人的心得,希望對大家有些幫助。

    問題現(xiàn)象:

      ECS Linux CentOS實例中時間經(jīng)常出現(xiàn)偏差,客戶已經(jīng)根據(jù)官方文檔配置了NTP時間同步,同步源為文檔中***的公網(wǎng)NTP服務(wù)器嘗試調(diào)整一些同步頻率的參數(shù),并沒有實際效果。其中注意到一個現(xiàn)象,如果我們列出NTP日志中信息,會發(fā)現(xiàn)一旦現(xiàn) "no servers reachable" 之后,ntpd就會停止同步。而如果重啟ntpd同步問題就會暫時得到解決,過了一天左右問題又會復(fù)現(xiàn)。

    調(diào)試過程:

      由于通過普通的ntpd的調(diào)整一些參數(shù)無法解決問題,決定采用GDB現(xiàn)場調(diào)試的方式來看看問題發(fā)生時為什么ntpd不再同步。

      調(diào)試之前我們首先要確認(rèn)ntpd更新系統(tǒng)時間是具體在哪個函數(shù)中實現(xiàn)的。因此首先采用閱讀Linux NTP代碼的方式將范圍縮小,確認(rèn)具體代碼段如下:

    void

    clock_select(void)

    {

    ...

    clock_update(); <----------- 更新系統(tǒng)時間

    因此我首先將斷點設(shè)在clock_select,結(jié)果是可以中到,得到的堆棧如下:

    因此我進(jìn)一步可以設(shè)置斷點到clock_update附近:

    設(shè)置斷點到clock_update但是這次沒有中,因此可以判定是在之前的邏輯判斷中跳出了。進(jìn)一步跟蹤后發(fā)現(xiàn):

    for (n = 0; n < NTP_HASH_SIZE; n++) {

    for (peer = peer_hash[n]; peer != NULL;peer =

    peer->next) {

    peer->flags &= ~FLAG_SYSPEER;

    peer->status = CTL_PST_SEL_REJECT;

    /*

    * Leave the island immediately if the peer is

    * unfit to synchronize.

    */

    if (peer_unfit(peer))

    continue;

      如上代碼我們對每一個時間同步源會調(diào)用peer_unfit來判斷他是否“適合”做時間同步。如果所有同步源都不適合做同步的話,自然就會跳出。因此接下去我們可以考慮設(shè)置斷點在peer_unfit,并且查看其返回值:

        注意上圖是在本地正常的測試機(jī)上截取的,而在用戶機(jī)器上返回值寄存器rax為1,因此可以判斷所有配置的同步源被peer_unfit中的邏輯判斷為不適合做同步。

    因此我們接下去就可以使用相同的方法對peer_unfit做進(jìn)一步跟蹤:

    我們發(fā)現(xiàn)失敗在如下的檢查:

    if (root_distance(peer) >= sys_maxdist + clock_phi *

    ULOGTOD(sys_poll))

    rval |= TEST11;     /* distance exceeded */

    匯編代碼如下:

    匯編代碼

        這表明計算下來本地時鐘和遠(yuǎn)端NTP服務(wù)器的distance過大。clock_phi 是晶振的頻率為0.000015,而sys_poll是同步的詢問時間,兩者相乘是非常小的。所以主要比較的是當(dāng)前的distance和sys_maxdist,后者默認(rèn)為1。

    root_distance是一個相對復(fù)雜的計算:

    dist += max(sys_mindisp, dist + peer->delay) / 2 +

    peer->rootdispersion + peer->disp + clock_phi *

    (current_time - peer->update) + peer->jitter;

    其中可以發(fā)現(xiàn)他和當(dāng)前時鐘和NTP服務(wù)上次成功的時間,兩者的差值有關(guān)。因此如果時鐘走的比較快,而有一次甚至幾次同步失敗,整個NTP服務(wù)就有可能不會再進(jìn)行同步了。

    尋找解決方案:

    以上比較的幾個參數(shù)中***可調(diào)的就是sys_maxdist,我們可以繼續(xù)閱讀Linux代碼來了解怎么調(diào)整他:

    case CONF_TOS_MAXDIST:

    proto_config(PROTO_MAXDIST, 0, ftemp, NULL);

    因此我們可以通過在ntp.conf中添加"tos maxdist"可以增大,從而容忍本地時鐘過快。

    以上一例是采用GDB調(diào)試的方法來解決一些服務(wù)產(chǎn)生的問題,希望給大家提供解決問題的另一種思路。


    • 聯(lián)系方式
    • 傳 真:86-10-82782026
    • 電 話:400-015-1230
    • 地 址:北京市海淀區(qū)北清路68號院用友軟件園北區(qū)17號樓三層
    在線咨詢

    咨詢電話:

    400-015-1230

    • 微信掃碼 關(guān)注我們

    Copyright ? 2002-2035 北京泰福特電子科技有限公司 版權(quán)所有 備案號:京ICP備12028220號
    京公網(wǎng)安備 11010802025976號

    掃一掃咨詢微信客服

    18519396506
    主站蜘蛛池模板: 天天爽夜夜爽人人爽一区二区| jizz麻豆| 久久国产精品精品国产色| 国产日韩精品欧美一区喷水| 国产欧色美视频综合二区| 狠狠色噜噜狠狠狠狠色综合久av | 香港三级日本三级a视频| 精品人妻久久久一区二区三区 | 久久永久免费人妻精品直播| 国产午夜精品理论大片| 亚洲视频a| 亚洲色欲网| 中文乱码人妻系列一区二区| 国产热A欧美热A在线视频| 亚洲国产一区二区三区最新| 欧美成人VA免费大片视频| 超浪熟女在线| 日韩成人一区二区二十六区| 一区二区三区鲁丝不卡| 久久久精品94久久精品| 久久99国产精品久久99软件| 免费无遮挡无码永久视频| 精品人妻蜜臀一区二区三区| 狠狠色香婷婷久久亚洲精品| 在线黄色A| 人妻精品久久久无码区色视| 亚洲高清最新AV网站| 日韩成人社区| 国产精品无码无卡在线播放| 噜噜噜天天躁狠狠躁夜夜精品| 免费国产女王调教在线视频| 精品午夜福利在线视在亚洲| 91乱子伦国产乱子伦www.sz-sd.cn| 免费一级毛片在线播放傲雪网| 成人日屄视频| 免费视频国产在线观看| 国内自拍偷拍一区二区三区| 大陆精大陆国产国语精品| 狠狠丁香激情久久综合| 国产人妻精品一区二区三区| A级毛片高清免费网站不卡|
    Powered by RRZCMS