【nginx怎么读】Nginx下读写I/O占用高故障如何解决

时间:2019-10-26  来源:nginx  阅读:

记录处理nginx读写IO负载过高的解决办法


故障现象

突然收到一台服务器负载过高告警,紧接着网站打开缓慢。
 
故障分析

    1、登录服务器,使用top命令看到Cpu行的iowait达到了70%以上,所以断定是IO负载过高的原因;
    2、接着使用iotop -o命令发现,Nginx的写IO特别大,并且在上一步的top命令看到Nginx的进程状态为D,表示Nginx在等待IO已经为僵死状态;
    3、这时候是清楚知道是Nginx在对文件系统进行大量的写操作导致的系统负载过高了,但还是不能知道具体Nginx在写什么文件导致的负载压力,所以我们还需要继续追查下去;
    4、我们找到其中一个nginx worker进程的pid,使用lsof -p pid列出来的文件发现除了一些系统库文件及日志文件,还有相当多的fastcgi_temp/xxx文件,有可能与这些文件有关联;
    5、再次使用strace -p pid追踪,发现nginx进程对某个fd进行大量的写操作,与lsof命令列出来的文件刚好符合;
    6、使用iostat 1输出的大量写io的分区也与fastcgi_temp所在分区相符合;
    7、猜测可能是外部正在上传大量的大文件给php-fpm,于是通过EZHTTP的小工具来查看实时流量,发现入站流量其实不大。
 
分析结果

根据以上的故障分析,非常有可能是本机的某些程序通过http上传大量大文件。因为对程序逻辑不熟悉,也只是猜测。为了尽快恢复服务,决定实施以下解决方案。

解决方案

既然清楚知道了fastcgi_temp io压力大,目前也无法短时间从根本上解决问题,所以决定把fastcgi_temp指向/dev/shm,也就是映射到了内存,重启nginx之后服务恢复了正常。最终原因还需要开发配合解决。

【nginx怎么读】Nginx下读写I/O占用高故障如何解决

http://m.bbyears.com/caozuoxitong/75480.html

推荐访问:
相关阅读 猜你喜欢
本类排行 本类最新