日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php-cgi cpu很高,php-cgi占用cpu资源过高的解决方法

發布時間:2023/12/1 php 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php-cgi cpu很高,php-cgi占用cpu资源过高的解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉的網上的,不過對PHP-CGI菜鳥的人,還是有點幫助的。

1. 一些php的擴展與php版本兼容存在問題,實踐證明 eAccelerater與某些php版本兼容存在問題,具體表現時啟動php-cgi進程后,運行10多分鐘,奇慢無比,但靜態資源訪問很快,服務器負載也很正常(說明nginx沒有問題,而是php-cgi進程的問題),解決辦法就是從php.ini中禁止掉eAccelerater模塊,再重啟php-cgi進程即可

2. 程序中可能存在死循環,導致服務器負載超高(使用top指令查看負載高達100+), 需要借助Linux的proc虛擬文件系統找到具體的問題程序

3. php程序不合理使用session , 這個發生在開源微博記事狗程序上,具體表現是有少量php-cgi進程(不超過10個)的cpu使用率達98%以上, 服務器負載在4-8之間,這個問題的解決,仍然需要借助Linux的proc文件系統找出原因。

4. 程序中存在過度耗時且不可能完成的操作(還是程序的問題),例如discuz x 1.5的附件下載功能: source/module/forum/forum_attachement.php中的定義

function getremotefile($file) {

global $_G;

@set_time_limit(0);

if(!@readfile($_G['setting']['ftp']['attachurl'].'forum/'.$file)) {

$ftp = ftpcmd('object');

$tmpfile = @tempnam($_G['setting']['attachdir'], '');

if($ftp->ftp_get($tmpfile, 'forum/'.$file, FTP_BINARY)) {

@readfile($tmpfile);

@unlink($tmpfile);

} else {

@unlink($tmpfile);

return FALSE;

}

}

return TRUE;

}

沒有對傳入的參數作任何初步檢查,而且設置了永不超時,并且使用readfile一次讀取超大文件,就可能存在以下問題:

A. 以http方式讀取遠程附件過度耗時

B. FTP無法連接時,如何及時反饋出錯誤?

C. readfile是一次性讀取文件加載到內存中并輸出,當文件過大時,內存消耗驚人

根據實驗發現采用readfile一次性讀取,內存消耗會明顯增加,但是CPU的利用率會下降較多。如果采用分段讀取的方式,內存消耗會稍微下降,而CPU占用卻會明顯上升。

對discuz x 1.5的這個bug較好解決方法就是后臺重新正確設置遠程附件參數。

以下是我逐步整理的故障排除步驟:

1. 得到占用cpu資源過多的php-cgi進程的pid(進程id), 使用top命令即可,如下圖:

經過上圖,我們發現,有兩個php-cgi進程的cpu資源占用率過高,pid分別是10059,11570,這一般都是程序優化不夠造成,如何定位問題的php程序位置?

2. 找出進程所使用的文件

/proc/文件系統保存在內存中,主要保存系統的狀態,關鍵配置等等,而/proc/目錄下有很多數字目錄,就是進程的相關信息,如下圖,我們看看進程10059正在使用哪些文件?

顯然,使用了/home/tmp/sess_*文件,這明顯是PHP的session文件, 我們查看這個session文件的內容為:view_time|123333312412

到這里,我們已經可以懷疑是由于php程序寫入一個叫view_time的session項而引起, 那么剩余的事件就是檢查包含view_time的所有php文件,然后修改之(比如改用COOKIE),這實話, 這個view_time并非敏感數據,僅僅記錄用戶最后訪問時間,實在沒必要使用代價巨大的session, 而應該使用cookie。

3. 找出有問題的程序,修改之

使用vi編輯以下shell程序(假設網站程序位于/www目錄下)

#!/bin/bash

find /www/ -name "*.php" > list.txt

f=`cat ./list.txt`

for n in $f

do

r=`egrep 'view_time' $n`

if [ ! "$r" = "" ] ; then

echo $n

fi

done

運行這個shell程序,將輸出包含有view_time的文件, 對記事狗微博系統,產生的問題位于modules/topic.mod.class文件中

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的php-cgi cpu很高,php-cgi占用cpu资源过高的解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。