收到專案回饋,客戶在使用我們提供的工具部署產品時遇到了困難,在主機新增步驟上遇到了問題,導致實施團隊無法繼續推進工作,因此向我們尋求協助。
環境資訊:kylin10
架構:arm
#在系統部署過程中,針對主機的大量操作,我們開發時採用了ansible劇本。最近遇到了執行過程卡頓的問題,初步懷疑是ansible執行時出現了阻塞。為了驗證這一點,我已經發送了一條命令給現場進行測試。
localhost$ date 2024年02月19日星期 17:30:41 CST localhost$ ansible all -i "192.168.2.84, -m shell -a 'date' --l become --become-method=sudo --become-user=root -u test 192.168.2.84 CHANGED rc=0 >> 2024年02月19日星期 17:33:34 CST
果然,一條簡單的ansible指令,環境執行了2min多才回傳結果,問題原因就出在這裡了,有了大致方向。
ansible實際執行時仍然依賴SSH遠端連接,之前遇到SSH連接速度緩慢的情況,初步推測可能是由於SSH連接速度慢導致執行返回速度慢。
檢查ssh參數,查/etc/ssh/sshd_config配置
GSSAPIAuthentication no #关闭SERVER上的GSS认证
在linux中,預設就是開啟了SSH的反向DNS解析,這個會消耗大量時間,因此需要關閉。在設定檔中,雖然UseDNS yes是被註解的,但預設開關就是yes
UseDNS=no #关闭SERVER上DNS反向解析
結果發現,專案上這2個ssh參數配置都是和上面一致的,並且手動測試ssh登入對端主機,速度很快
沒有頭緒,只能用linux的strace指令追蹤下系統呼叫了
#查看strace日誌發現有大量的select等待,應該是在執行某項操作時長時間阻塞。
使用ansible調試
ansible all -i "192.168.2.84, -m shell -a 'date' --l become --become-method=sudo --become-user=root -u test -vvv
指令後面加上-vvv就可以看到詳細的執行過程了
從debug訊息中,看到報錯”mux_client_read_packet: read header failed: Broken pipe”,執行腳本的地方可以看到在執行python相關的命令,ansible依賴於python,是否和python版本有關係呢?
在網路上查看資料說ansible和python有相容性問題。
#於是檢查下python版本,可以看到python預設版本為python2,但是系統上也有python3,嘗試將軟連結修改python3.7驗證
#再次執anible指令
#執行時間1.3s,看來是ansible和python版本的兼容性導致了這次問題。
以上是ansible執行速度慢怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!