我發現在個人部落格的Linux服務裡,資料庫這項服務經常會無法使用必須重啟才可以正常訪問,所以給大家帶來這個問題的解決方法。
分析問題
發現問題以後,先使用free -m 指令查看目前伺服器執行狀況:
可以看到我的伺服器記憶體是2G的,但是目前可用記憶體只剩下70M,記憶體使用率高達92%,很有可能是記憶體使用率過高導致資料庫服務掛斷。
繼續看詳細情況,使用top 指令:
然後再看指令輸出結果中詳細列出的進程情況,重點關注第10列內存使用佔比:
發現CPU使用率不算高,也排除了CPU的問題,另外可以看到資料庫服務佔用15.2%的內存,記憶體使用過高時將會擠掉資料庫進程(佔用記憶體最高的進程),導致服務掛斷,所以我們需要查看詳細記憶體使用情況,是哪些進程耗費了這麼多的記憶體呢?
使用指令:
ps auxw|head -1;ps auxw|sort -rn -k4|head -40
查看消耗記憶體最多的前40個進程:
mysql資料庫服務之外,php-fpm服務池開啟了太多子進程,佔用超過大半內存,問題找到了,我們開始解決問題:設置控制php-fpm進程池進程數量。
解決問題透過各種搜尋手段,發現可以透過設定pm.max_children 屬性,控制php-fpm子進程數量,首先,開啟php-fpm設定檔,執行指令:
vi /etc/php-fpm.d/www.conf
systemctl restart php-fpm
ps -fe |grep "php-fpm"|grep "pool"|wc -l
netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"|wc -l
javascript 折半查找字元在陣列中的位置(有序列表)_javascript技巧
#
以上是怎樣解決php-fpm在Linux下進程過多導致記憶體耗盡的詳細內容。更多資訊請關注PHP中文網其他相關文章!