在一次修改nginx配置時候,執行
case:
#/usr/local/nginx/sbin/nginx -t
出現執行命令出現很久沒返回結果,也沒返回成功或是失敗,就是一直卡住的狀態,嚴重影響nginx配置文件修改。
-t : test configuration and exit //-t就是檢查nginx配置檢查。

出現此問題之后,開始着手排查原因。
solution:
於是用ps-ef獲取到改進程的pid,想知道這個進程到底在哪一步耗時
ps -ef |grep nginx

拿到pid是3911。
#strace -o output.txt -T -tt -e trace=all -p 3911 //strace命令查看每一步執行的時間開銷


發現大量fd=5的文件描述符出現了timeout。
於是進一步查看fd=5 且進程號為3911的操作,到底在干嗎:

原來是這一步操作耗時由5s之久,
進一步排查發現,該步操作是用UDP協議,請求的是系統的domain服務(即DNS服務)
仔細查看系統/etc/resolv.conf 配置,發現dns的第一個nameserver 真的是10.1.1.172。
后經確認,此nameserver的所在主機出現故障,還沒維護好。
至此,完成了一次完整的排障經歷。
關鍵點在於:
1、善於用strace定位問題;
2、理解fd(file description) 文件描述符的含義;
3、思考總結