<span id="vuqcc"><table id="vuqcc"></table></span>
  • <tt id="vuqcc"></tt><em id="vuqcc"></em>
        亚洲国产区,亚洲va一区二区三区视频,国产乱人偷精品人妻,亚洲内射无码,66久久,人妻一卡二卡,91丨日韩丨精品丨乱码,精品人妻一二
        您好,歡迎進入北京泰福特電子科技有限公司官網(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同步問題就會暫時得到解決,過了一天左右問題又會復現(xiàn)。

        調(diào)試過程:

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

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

        void

        clock_select(void)

        {

        ...

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

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

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

        設(shè)置斷點到clock_update但是這次沒有中,因此可以判定是在之前的邏輯判斷中跳出了。進一步跟蹤后發(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,并且查看其返回值:

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

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

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

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

        ULOGTOD(sys_poll))

        rval |= TEST11;     /* distance exceeded */

        匯編代碼如下:

        匯編代碼

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

        root_distance是一個相對復雜的計算:

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

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

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

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

        尋找解決方案:

        以上比較的幾個參數(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
        主站蜘蛛池模板: 久久福利电影| 婷婷有码| 国产美女精品一区二区| 久久se精品一区精品二区国产| 影音先锋欧美第一页| 国产亚洲精品超碰| 国产成AV人片在线观看天堂无码| 日韩AV在线免费观看| a在线视频v视频| 国产无码专区| 无码国内精品久久人妻中文成人| 深夜福利姬| 伊人日韩亚洲| 中文字幕在线v| 98精品全国免费观看视频| 久久人人97超碰精品| 色www视频永久免费| 国产成本人片免费a∨短片| 国内综合精品午夜久久资源| 成a人片亚洲日本久久| 自拍偷拍日韩精品| 午夜家庭影院| 精品熟女999| 国产98色在线 | 日韩| 国产爆初菊哭了| 窝窝午夜福利| 久久无码中文字幕免费影院蜜桃| 美姑县| 欧美中文字幕影院| 国产无人区码一区二区| 国产精品女同一区二区久| 日韩精人妻无码一区二区三区| 成人av无码电影高清在线观看| 99久久国产综合精品女图图等你| 极品国产主播粉嫩在线观看| 国产v片在线播放| 亚洲AV无码久久精品国产老人| www.狠狠干| 日韩成人一区二区三区在线观看| 人妻图区| 日韩人妻丰满无码区A片|
        Powered by RRZCMS