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之后服務恢復了正常。最終原因還需要開發配合解決。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM