天天看點

PHP-CGI 程序 CPU 100%

最近有伺服器不時出現的CPU使用率超高,記憶體幾乎被吃光,系統甚至自動kill掉一些程序,如sshd,vsftpd等。用top檢視,PHP-CGI程序高挂不下,幾番折騰,把問題解決,總結了如下的簡要記錄。

一、程序跟蹤

# top //找出CPU使用率高的程序PID

# strace -p PID //跟蹤程序

# ll /proc/PID/fd //檢視該程序在處理哪些檔案

将有可疑的PHP代碼修改之,如:file_get_contents沒有設定逾時時間。

二、記憶體配置設定

如果程序跟蹤無法找到問題所在,再從系統方面找原因,會不會有可能記憶體不夠用?據說一個較為幹淨的PHP-CGI打開大概20M-30M左右的記憶體,決定于PHP子產品開啟多少。

通過pmap指令檢視PHP-CGI程序的記憶體使用情況

# pmap $(pgrep php-cgi |head -1)

按輸出的結果,結合系統的記憶體大小,配置PHP-CGI的程序數(max_children)。

三、監控

最後,還可以通過監控與自動恢複的腳本保證服務的正常運轉。下面是我用到的一些腳本:

隻要一個php-cgi程序占用的記憶體超過 %1 就把它kill掉

#!/bin/sh PIDS=`ps aux|grep php-cgi|grep -v grep|awk’{if($4>=1)print $2}’` for PID in $PIDS do echo `date +%F….%T`>>/data/logs/phpkill.log echo $PID >> /data/logs/phpkill.log kill -9 $PID done      

檢測php-fpm程序

#!/bin/bash netstat -tnlp | grep “php-cgi” >> /dev/null #2&> /data/logs/php_fasle.log if [ "$?" -eq "1" ];then #&& [ `netstat -tnlp | grep 9000 | awk '{ print $4}' | awk -F ":" '{print $2}'` -eq "1" ];then /usr/local/webserver/php/sbin/php-fpm start echo `date +%F….%T` “System memory OOM.Kill php-cgi. php-fpm service start. ” >> /data/logs/php_monitor.log fi      

通過http檢測php執行

#!/bin/bash status=`curl -s –head “http://127.0.0.1:8080/chk.php” | awk ‘/HTTP/ {print $2}’` if [ $status != "200" -a $status != "304" ]; then /usr/local/webserver/php/sbin/php-fpm restart echo `date +%F….%T` “php-fpm service restart” >> /data/logs/php_monitor.log fi      

部落客仍從事運維行業,擁有10年+ 一線運維經驗,技術上靠得住(還行吧),生活不容易,純粹補貼家用,時間充裕,與有需要的朋友 互相幫助。

業務範圍:網站、伺服器、系統(linux|windows)、架構、部署、調優、排錯、安全方案、低成本解決中小量攻雞、業務上雲(所有公有雲)

合作形式:代維、兼職、臨時技術支援

合作理念:誠信第一、信任是基石、不解決問題不收錢、完工才收

職業操守:講誠信和絕不影響使用者資料安全,您信任後再合作

客戶監督:本博文評論一直開放,合作的朋友們可自由發表合作後對我的評價(壞朋友請放過我吧0_0)

自評:我的技術不是很好也不是很差,自信能解決絕大多數問題。截止目前合作過的項目20個左右。相信合作後不會讓您失望。

鑒于運維的敏感性,信任是很重要的,有需要的朋友們可以聯系我,謝謝照顧與支援,感恩~~