一般情況下,PHP-CGI只在用戶(hù)訪問(wèn)的時(shí)候會(huì)占用CPU資源,但是最近有同事反映,香港服務(wù)器上的的PHP-CGI進(jìn)程占用了非常多的CPU,但是訪問(wèn)流量卻非常少。這顯然是一個(gè)不正常的現(xiàn)象,說(shuō)有些地方存在故障。以下導(dǎo)致此問(wèn)題可能存在的原因,在此與大家分享。

1. 兼容性問(wèn)題
如果php的擴(kuò)展與php版本兼容存在問(wèn)題,已經(jīng)有反映過(guò)類(lèi)似的案例, eAccelerater與某些php版本兼容存在問(wèn)題,具體表現(xiàn)時(shí)啟動(dòng)php-cgi進(jìn)程后,
運(yùn)行10多分鐘,奇慢無(wú)比,但靜態(tài)資源訪問(wèn)很快,服務(wù)器負(fù)載也很正常(這說(shuō)明服務(wù)器解析功能的nginx是沒(méi)有問(wèn)題,而是php-cgi進(jìn)程的問(wèn)題)。
解決辦法
從php.ini中禁止掉eAccelerater模塊,再重啟php-cgi進(jìn)程即可。
2. 程序中可能存在死循環(huán)
如果程序中存在死循環(huán),則一定導(dǎo)致服務(wù)器負(fù)載超高(使用top指令查看負(fù)載高達(dá)100+)。
解決辦法
借助Linux的proc虛擬文件系統(tǒng)找到具體的問(wèn)題程序。
3. php程序不合理使用session
在查閱的資料中有看到,這個(gè)發(fā)生在開(kāi)源微博記事狗程序上,具體表現(xiàn)是有少量php-cgi進(jìn)程(不超過(guò)10個(gè))的cpu使用率達(dá)98%以上,
服務(wù)器負(fù)載在4-8之間,
解決辦法
需要借助Linux的proc文件系統(tǒng)找出原因。
4. 程序中存在過(guò)度耗時(shí)且不可能完成的操作
如果是這樣的話,是因?yàn)槌绦虮旧碓诰帉?xiě)的時(shí)候,就寫(xiě)的不夠規(guī)范。需要與軟件的設(shè)計(jì)者以及編程工程師共同解決。