文章来源:《https://www.centos.bz/2015/04/handle-nginx-write-io-problem/

故障现象

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

故障分析

  • 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写IO占用高故障处理的更多相关文章

  1. Linux查看CPU、内存、IO占用高的进程

    查看CPU占用高的top15进程 | | 查看内存占用高的top15进程 | | 查看IO占用高的top15进程 ./ind_high_io_process.py 3 4 5.其中3表示间隔3秒获取一 ...

  2. 找出linux服务器IO占用高的程序

     一台服务器比较性能无外乎内存.cpu使用率.IO使用率,把这3样优化好了,你服务器的负载就要小很多,当然网络情况不在我的考虑范围,毕竟网络这个情况是很不稳定,就算你服务器上把网络优化得再好,idc不 ...

  3. 云服务器 ECS Linux IO 占用高问题排查方法

    https://help.aliyun.com/knowledge_detail/41224.html?spm=5176.7841174.2.19.uqC1as#使用 iostat 从系统纬度查看磁盘 ...

  4. 一次磁盘IO过高分析过程

    1.查看监控,发现整点时间有写IO过高情况

  5. MySQL占用IO过高解决方案【转】

    1.日志产生的性能影响: 由于日志的记录带来的直接性能损耗就是数据库系统中最为昂贵的IO资源.MySQL的日志包括错误日志(ErrorLog),更新日志(UpdateLog),二进制日志(Binlog ...

  6. 同步异步,阻塞非阻塞 和nginx的IO模型

    同步与异步 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication).所谓同步,就是在发出一个*调用*时,在没有得 ...

  7. (转)同步异步,阻塞非阻塞 和nginx的IO模型

    同步异步,阻塞非阻塞 和nginx的IO模型  原文:https://www.cnblogs.com/wxl-dede/p/5134636.html 同步与异步 同步和异步关注的是消息通信机制 (sy ...

  8. Nginx+Keepalived负载均衡高可用

    Nginx+Keepalived负载均衡高可用方案: Nginx 使用平台:unix.linux.windows. 功能: A.www web服务  http 80 b.负载均衡(方向代理proxy) ...

  9. 在CentOS上使用Nginx和Tomcat搭建高可用高并发网站

    目录 目录 前言 创建CentOS虚拟机 安装Nginx 安装Tomcat 安装lvs和keepalived 反向代理 部署网站 搭建数据库 编写网站项目 解决session一致性 注意 参考资料 前 ...

随机推荐

  1. 微服务架构eureka集群高可用配置

    工具:idea 环境:java8.maven3 版本:spring boot 1.5.15.RELEASE 1.搭建spring boot eureka项目 2. pom.xml添加相应依赖,如下: ...

  2. 带你玩转Eclipse项目转成AndroidStudio项目

    随着Android对Eclipse开发工具的淘汰,越来越多的公司使用AndroidStudio进行相应的Android开发工作.如此,原来用Eclipse开发的项目,怎么导入到AndroidStudi ...

  3. 各大公司Java面试题超详细总结

    ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量.采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副 ...

  4. 股票的历史市盈率查询PE

    浦发银行的历史市盈率PE查询:https://androidinvest.com/Stock/History/SH600000/ 白云机场的历史市盈率PE查询:https://androidinves ...

  5. apache+tomcat集群部署笔记

    前提条件 安装gcc,gcc-c++两个编译器 yum install gcc yum install gcc-c++ 接下来开始安装集群相关环境: 1.下载apr,apr-util,pcre,apa ...

  6. Chrome扩展应用

    现在越来越多的用户将chrome浏览器设置为自己默认的浏览器,不仅是因为他的界面美,最重要的是他对html5和CSS3完美的支持,且调试工具非常好用,还有丰富的扩展库.如何安装自己的扩展呢? 点击自定 ...

  7. python Thread对象的setDaemon(True)的作用。

    1.如果主线程是永远都不会结束的,那设置一个线程为守护线程是没必要的,设不设置都一样. 2.什么时候需要设置为守护线程?如果希望子线程一直运行,可以把子线程的代码写在while True里面一直循环, ...

  8. webdriver+expected_conditions二次封装

    结合这两种方法对代码做二次封装,可以提升脚本性能 例: #coding:utf-8 #封装元素方法from selenium import webdriverfrom selenium.webdriv ...

  9. 【scala】 scala 条件控制 和异常处理(二)

    1.scala 变量定义 ,var val 区别. var 定义可变变量 val 定义不可变变量,scala 推荐使用.相当于Java的final 变量. scala中包含的基本数据类型详情如下表所示 ...

  10. jsoup Cookbook(中文版)-Jsoup解析HTML

    jsoup Cookbook(中文版) 入门 1.      解析和遍历一个html文档 如何解析一个HTML文档: String html = "<html><head& ...