查看進程磁盤io讀寫情況
#ipstat命令 只能查看總的IO數(shù)據(jù),不能查看某個進程的IO數(shù)據(jù)
#iotop命令,該命令需要python環(huán)境才能運行
sudo iptop -p $PID -d 1
#當需要查看所有進程的情況時 去掉-p參數(shù)即可
#pidstat命令
sudo pidstat -p $PID -d 1
#當需要查看所有進程的情況時 去掉-p參數(shù)即可
nginx占用分析
#使用lsof命令查看nginx占用的文件,看proxy_temp路徑下臨時文件是否很多
首先,需要確定一件事:Nginx不是立即轉(zhuǎn)發(fā)收到的請求,而是等buffer滿之后再轉(zhuǎn)發(fā),默認是On。那么道理很簡單了,我們將Nginx作為代理進行轉(zhuǎn)發(fā)數(shù)據(jù)時,由于我們轉(zhuǎn)發(fā)的body相對較大(幾百K),而且在并發(fā)又很高的情況,那么大量的數(shù)據(jù)就要被緩存,而當Nginx的buffer空間不夠的時候,就會將buffer的數(shù)據(jù)刷新到磁盤緩存目錄,到時候磁盤寫入非常高,同時由于磁盤的性能也會影響到轉(zhuǎn)發(fā)的性能和效率。
說白了就是當我們請求發(fā)送的數(shù)據(jù)超過nginx的配置參數(shù)proxy_busy_buffer_size配置的值時,就會導致nginx會把多的數(shù)據(jù)寫入到磁盤。
解決方案
方案一
增大proxy_busy_buffer_size參數(shù)的值
不過這樣可能就會很耗內(nèi)存資源
方案二
nginx 配置中添加 proxy_buffering off;
proxy_buffering : 被代理服務器的數(shù)據(jù)和客戶端的請求異步。也就是 后端服務器把數(shù)據(jù)返回到nginx服務器,nginx服務器緩存一下,然后再返回給客戶端
方案三
此方案嚴格來說不是解決磁盤io,而是提高io性能
使用SSD硬盤以提高io性能