一、問題描述
1、19號手動升級到wordpress4.1,21號早上7點看網站php探針,發現系統負載過高,差不多在1到1.5之間。
2、雖然對于雙核處理器,這個值還可以接受,但是之間負載都只有0.2左右,而網站流量又沒有突然增加很多,所以推定肯定是出問題了。
3、eth 外網流量正常,lo 本地流量增長很快,reboot系統后(之間服務器已經穩定運行了632天9小時25分鐘),1個小時不到就有了1G的流量。
4、top命令發現php-cgi 占用cpu很多,大部分時間都在80%到90%之間,cpu time+ 時間很長。
二、解決方法
1、百度搜索:php cgi cpu找到文章
2、修改php-fpm.conf
request_terminate_timeout 0s 改為30s
request_slowlog_timeout 0s 改為3s
重啟php-fpm:/usr/local/php/sbin/php-fpm restart
3、查看slow.log發現,每一個統計時間點里都有如下提示
script_filename = /網站路徑/wp-cron.php
[0xbfcaa950] do_action_ref_array() /網站路徑/wp-cron.php
4、想到可能和wp-cron.php有關,于是百度搜索:wp-cron.php找到:
5、于是找到php-cgi進程占用cpu資源導致服務器負載過高的解決方法:禁用WP-Cron
編輯wordpress wp-config.php,加入:define(‘DISABLE_WP_CRON’, true);
然后 /root/lnmp restart 重啟lnmp
重啟之后cpu 占用終于正常,網站負載也減了下來,slow.log 也不再增加新的內容
三、排除可能的原因
1、禁用hyper cache
開始覺得可能hyper cache生成的緩存文件過多引起php負載,禁用hyper cache插件后發現負載非但不降,反而升了,說明:不是hyper cache的問題且hyper cache可以起到降低php負載的作用。
2、刪除eAccelerator
依據這篇文章提醒:vi /usr/local/php/etc/php.ini 刪除文件末尾Accelerator的那幾行配置刪掉,保存重啟lnmp,發現問題依舊,所以也排除了eAccelerator的原因,之后再重新在php.ini中添加上eAccelerator的配置。
3、file_get_contents的問題
參考上邊兩篇文章,ll /proc/PID/fd 沒有發現異常。
yum install strace 安裝(不安裝會提示錯誤:-bash: strace: command not found) 后
strace -p pid,有類似的提示錯誤:poll([{fd=4, events=POLLIN}], 1, 0) = 0 (Timeout)
頁面不停的閃動,服務器負載驟增。
兩篇文章中提到的:stream_context_create 設置超時時間,技術太差,完全看不懂要如何操作,所以也沒辦法向下進行,放棄。
4、php5.2 和curl的兼容問題
解決方法:設置curl超時時間
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
也不知如何操作,放棄。