線上一台機器(該論壇所在機器)近期頻繁出現502,每100次訪問就會出現10次,這頻率也太高了。於是開始了我的502排查之旅
ps aux |grep -c php
結果為200
netstat -an |grep -c php
結果一直在5以下,這說明php-cgi 的進程是絕對夠用的。
查看php-fpm.log
tail -f /usr/local/php/logs/php-fpm.log
無有價值信息
查看nginx錯誤日志
tail -f /usr/local/nginx/logs/error.log
無有價值信息
感覺問題可能出在了nginx的配置上,於是網上找關於nginx.conf 的配置說明,改來改去始終解決不了這難纏的502。(該過程前后延續一周之多,改了N多個參數,因為沒有價值,所以我不再詳細記錄,在這里簡單一筆帶過。)
幾天過后,突然靈機一動,nginx的錯誤日志既然不報錯,那說明定義的日志級別沒有達到要報錯的要求,於是找資料修改nginx錯誤日志級別為error(默認為crit)
請參考http://mylinux.5d6d.net/thread-1289-1-1.html
終於發現有價值的信息:
connect() to unix:/tmp/php-fpm.socket failed (11: Resource temporarily unavailable) while connecting to upstream
google了一番,馬上就找到了解決問題的方法:
修改php-fpm.conf
把
<value name="backlog">-1</value>
改成:
<value name="backlog">1024</value>
這是因為,php-fpm 在 backlog 設置為 -1 的情況下,表示backlog數無限制,由操作系統決定,而操作系統是由內核參數net.core.somaxconn 決定,我的操作系統該參數的值設置的很大為262144。該參數的值默認為128,我想設置成262144肯定是不合理的。所以,我又試驗了一下。
不修改php-fpm.conf ,即backlog的值為-1, 然后把net.core.somaxconn修改為默認值128 ,此時也沒有再出現502
本文引用:http://www.360doc.com/content/15/0923/13/27889159_501013998.shtml