Nginx写IO占用高故障处理

文章来源:《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之后服务恢复了正常。最终原因还需要开发配合解决。

时间: 2024-11-03 08:02:30

Nginx写IO占用高故障处理的相关文章

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

一台服务器比较性能无外乎内存.cpu使用率.IO使用率,把这3样优化好了,你服务器的负载就要小很多,当然网络情况不在我的考虑范围,毕竟网络这个情况是很不稳定,就算你服务器上把网络优化得再好,idc不给力也没用,除非是自己公司机房,好了,今天只说下怎么找IO占用高的程序. 系统:centos 5.5 1.开启IO监控 sysctl vm.block_dump=1或echo 1 >/proc/sys/vm/block_dump 2.开启后内核会将IO读写dump到日记,用dmesg查看: dmesg

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

https://help.aliyun.com/knowledge_detail/41224.html?spm=5176.7841174.2.19.uqC1as#使用 iostat 从系统纬度查看磁盘 IO 负载 IO 负载查看方法 使用 iostat 从系统纬度查看磁盘 IO 负载 使用 iotop 从进程纬度查看磁盘 IO 负载 使用 iostat 从系统纬度查看磁盘 IO 负载 可以通过 iostat 从系统维度查看 IO 负载情况. iostat 并非常见 Linux 发行版本自带工具,

记一次性能测试:mysql占用磁盘IO过高 的解决过程

在一次性能测试时,发现mysql的cpu使用率不高,但是磁盘io很高, 一开始考虑是mysql的慢日志比较多,但是查看后发现慢日志并不多,而且只有一台mysql. 进入实例,查看sync_binlog变量 mysql> show variables like '%sync_binlog%' -> ; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | sync_binlog | 1 |

找出导致Mysql机器IO过高的SQL

近期一次mysql机器io过高导致入库缓慢,这里记录下解决和问题查找的过程. 首先通过top看到wa比较高,wa意思是CPU花在等待IO上的时间占比, 进而通过iostat -x 2看到如下图, rrqm/s:   每秒进行 merge 的读操作数目.即 delta(rmerge)/swrqm/s:  每秒进行 merge 的写操作数目.即 delta(wmerge)/sr/s:           每秒完成的读 I/O 设备次数.即 delta(rio)/sw/s:         每秒完成的

Nginx+Keepalived实现站点高可用

Nginx+Keepalived实现站点高可用 Posted on 2015-05-18   |   In Linux, Nginx  |   15条评论 公司内部 OA 系统要做线上高可用,避免单点故障,所以计划使用2台虚拟机通过 Keepalived 工具来实现 nginx 的高可用(High Avaiability),达到一台nginx入口服务器宕机,另一台备机自动接管服务的效果.(nginx做反向代理,实现后端应用服务器的负载均衡)快速搭建请直接跳至 第2节. 1. Keepalived

Nodejs mkdirP 模块导致CPU占用高的问题

Nodejs mkdirP 模块导致CPU占用高的问题 近期将nodejs项目部署到服务器上并启动时,发现node进程的cpu占用率在40%左右,当时表示非常不解,刚启动的服务并没有运行什么需要大量消耗cpu的逻辑,且此时还未有请求发送到服务器端. 鉴于这种情况,只能猜测是某段程序在初始化一些东西的时候异常,所以才导致了这种情况. 经过对代码的排查后,最终锁定出为题的代码块如下: router.use(multer({ dest: config.uploadDir, limits:{ fileS

IO负载高的来源定位 IO系列

http://elf8848.iteye.com/category/281637 前言: 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的util),但是无法快速的定位到IO负载的来源进程和来源文件导致无法进行相应的策略来解决问题. 这个现象在MySQL上更为常见,在5.6(performance_schema提供io instrument)之前,我们通常只能猜到是MySQL导致的高IO,但是没法定位具体是哪个文件带来的负载. 例如是ibdata的刷写?还是冷门ib

SQLSERVER排查CPU占用高的情况

SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高的,他说服务器运行的是金蝶K3软件,数据库实例里有多个数据库 他说是这几天才出现的,而且在每天的某一个时间段才会出现CPU占用高的情况 内存占用也很高,占用了30个G -----------------------------------------------华丽的分割线-------------

(转)解决Win7/8硬盘占用高方案汇总

写在前面 在Windows7时代,很少人会抱怨硬盘占用率高的问题.但是到了Windows7/8.1时,硬盘占用率成为一个扰人的问题.硬盘占用率经常100%会导致系统卡.慢,而且也很伤硬盘.网上流传着许多降低Windows8/8.1硬盘占用率的方法,今天,在此汇总一下,通过以下六种方案的处理,硬盘占用率或多或少一定会有所解决! 本帖隐藏的内容 1.关闭家庭组 家庭组是占用硬盘的重要原因之一.有网友反映,在关闭家庭组后,硬盘占用率从90%降到10%左右,这不是耸人听闻.因为开启家庭组后,系统就会不断