在一次修改nginx配置时候,执行
case:
#/usr/local/nginx/sbin/nginx -t
出现执行命令出现很久没返回结果,也没返回成功或是失败,就是一直卡住的状态,严重影响nginx配置文件修改。
-t            : test configuration and exit   //-t就是检查nginx配置检查。
记一次nginx -t非常慢的排障经历
出现此问题之后,开始着手排查原因。
 
solution:
于是用ps-ef获取到改进程的pid,想知道这个进程到底在哪一步耗时
ps -ef |grep nginx
记一次nginx -t非常慢的排障经历
拿到pid是3911。
#strace -o output.txt -T -tt -e trace=all -p 3911     //strace命令查看每一步执行的时间开销
 
记一次nginx -t非常慢的排障经历
 
记一次nginx -t非常慢的排障经历
 
发现大量fd=5的文件描述符出现了timeout。
 
于是进一步查看fd=5 且进程号为3911的操作,到底在干吗:
记一次nginx -t非常慢的排障经历
原来是这一步操作耗时由5s之久,
进一步排查发现,该步操作是用UDP协议,请求的是系统的domain服务(即DNS服务)
仔细查看系统/etc/resolv.conf 配置,发现dns的第一个nameserver 真的是10.1.1.172。
后经确认,此nameserver的所在主机出现故障,还没维护好。
至此,完成了一次完整的排障经历。
 
关键点在于:
1、善于用strace定位问题;
2、理解fd(file description) 文件描述符的含义;
3、思考总结

相关文章:

  • 2021-10-06
  • 2021-11-22
  • 2021-10-27
  • 2021-08-15
  • 2021-04-12
  • 2021-10-20
  • 2021-05-03
猜你喜欢
  • 2021-12-03
  • 2018-07-24
  • 2022-12-23
  • 2019-10-08
  • 2021-12-14
  • 2022-01-28
  • 2021-11-22
相关资源
相似解决方案