<nav id="kkk8k"></nav>
<tr id="kkk8k"><blockquote id="kkk8k"></blockquote></tr>
    <tr id="kkk8k"><blockquote id="kkk8k"></blockquote></tr>
  • 国产美女在线精品,熟女亚州综合,好骚综合av,在线亚洲国模九九,中国激情网,在线免费熟女,中文字幕一区二区三区四区五区,91黄色视频在线观看
    您好,歡迎進入北京泰福特電子科技有限公司官網

    咨詢服務熱線

    400-015-1230

    Linux下GDB調試NTP時間同步問題

    發布時間:2022-04-11 15:48:59

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

    問題現象:

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

    調試過程:

      由于通過普通的ntpd的調整一些參數無法解決問題,決定采用GDB現場調試的方式來看看問題發生時為什么ntpd不再同步。

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

    void

    clock_select(void)

    {

    ...

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

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

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

    設置斷點到clock_update但是這次沒有中,因此可以判定是在之前的邏輯判斷中跳出了。進一步跟蹤后發現:

    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;

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

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

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

    我們發現失敗在如下的檢查:

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

    ULOGTOD(sys_poll))

    rval |= TEST11;     /* distance exceeded */

    匯編代碼如下:

    匯編代碼

        這表明計算下來本地時鐘和遠端NTP服務器的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;

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

    尋找解決方案:

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

    case CONF_TOS_MAXDIST:

    proto_config(PROTO_MAXDIST, 0, ftemp, NULL);

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

    以上一例是采用GDB調試的方法來解決一些服務產生的問題,希望給大家提供解決問題的另一種思路。


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

    咨詢電話:

    400-015-1230

    • 微信掃碼 關注我們

    Copyright ? 2002-2035 北京泰福特電子科技有限公司 版權所有 備案號:京ICP備12028220號
    京公網安備 11010802025976號

    掃一掃咨詢微信客服

    18519396506
    主站蜘蛛池模板: 日韩视频无码中字免费观| 欧美男男大粗吊1069| 中文字幕人妻偷伦在线视频| 无码任你躁久久久久久| 国产V视频| 无码任你躁久久久久久| 性感美女久久久| 宫西光在线| 丰满熟女乱婬A片六区| 欧美美女网18| 丰满熟女人妻中出系列| 777亚洲精品乱码久久久久久| 欧美极品在线播放| 中文乱字幕视频一区| 69avav?cn| 乱子真实露脸刺激对白| 囯产精品一品二区三区| 亚洲性久久久影院| 婷婷开心色四房播播| 国产精品视频区| 亚洲天堂在线播放| 精69xxxⅹxx喷潮| 国产98色在线 | 国产| 亚洲成人有码免费在线| 亚洲天堂三区| 囯产精品一品二区三区| 定襄县| 国产美女福利视频| 精品合集播放| 亚洲熟女精品中文字幕| 青娱乐极品视觉盛宴av| 情侣做性视频在线播放| 国产精品1000夫妇激情| 日韩一二区在线| 亚洲精品tv久久久久久久久| 97久久人人超碰超碰窝窝| 熟女中文字幕丝袜日韩| av不卡一区| 亚洲激情一区| 精品国产乱码久久久久久浪潮小说 | 亚洲日韩欧洲无码av夜夜摸|
    Powered by RRZCMS