查看进程磁盘io读写情况
#ipstat命令 只能查看总的IO数据,不能查看某个进程的IO数据
#iotop命令,该命令需要python环境才能运行
sudo iptop -p $PID -d 1
#当需要查看所有进程的情况时 去掉-p参数即可
#pidstat命令
sudo pidstat -p $PID -d 1
#当需要查看所有进程的情况时 去掉-p参数即可
nginx占用分析
#使用lsof命令查看nginx占用的文件,看proxy_temp路径下临时文件是否很多
首先,需要确定一件事:Nginx不是立即转发收到的请求,而是等buffer满之后再转发,默认是On。那么道理很简单了,我们将Nginx作为代理进行转发数据时,由于我们转发的body相对较大(几百K),而且在并发又很高的情况,那么大量的数据就要被缓存,而当Nginx的buffer空间不够的时候,就会将buffer的数据刷新到磁盘缓存目录,到时候磁盘写入非常高,同时由于磁盘的性能也会影响到转发的性能和效率。
说白了就是当我们请求发送的数据超过nginx的配置参数proxy_busy_buffer_size配置的值时,就会导致nginx会把多的数据写入到磁盘。
解决方案
方案一
增大proxy_busy_buffer_size参数的值
不过这样可能就会很耗内存资源
方案二
nginx 配置中添加 proxy_buffering off;
proxy_buffering : 被代理服务器的数据和客户端的请求异步。也就是 后端服务器把数据返回到nginx服务器,nginx服务器缓存一下,然后再返回给客户端
方案三
此方案严格来说不是解决磁盘io,而是提高io性能
使用SSD硬盘以提高io性能