2012-06-14 63 views
-1

我是虛擬主機用戶,我不知道爲什麼現在,但我有被好幾個小時推出(如personnaly知名客戶)一些PHP腳本,所以我認爲這是一個錯誤的地方。腳本殺死過漫長的過程

這些腳本是吃的RAM和交換。所以我在尋找一種方式來列出進程,找到執行時間,由1殺了他們1如果執行超過10或20分鐘。

我不是bash高手,但我知道bash和管道。我唯一不知道的是如何列出進程(執行時間和完整的命令行參數)。事實上,即使是在頂部(然後c)PHP中沒有參數:/

感謝您的幫助。

+0

既然你是一個虛擬主機,你不應該僱用一個系統管理員來處理這些問題嗎? – lanzz

+1

我是IT專業的學生。我成立了一個旨在提供免費/低成本互聯網服務的非營利組織。 1)我正在學習這些問題,2)我是系統管理員。 – Max13

+0

這些php進程是如何創建的?你使用的是Apache的mod_php,fastcgi,php-fpm嗎?也許[ulimit](http://ss64.com/bash/ulimit.html)可以提供幫助。 –

回答

4

如果您正在使用mod_php,並且運行的是Apache,你不會看到一個單獨的PHP的過程,因爲腳本實際上是一個Apache進程內運行。如果您正在以FastCGI的方式運行,您也可能看不到執行腳本的可區分的PHP進程,儘管我沒有使用PHP/FastCGI的經驗,並且可能是錯誤的。

可以設置max_execution_time選項,但在運行時通過調用set_time_limit()可以覆蓋該選項,除非在Safe Mode中運行。但是,安全模式已在PHP 5.3和中被棄用,在5.4中刪除了,因此如果您使用5.4或計劃升級,則不能依賴它。

如果您可以對現有客戶進行管理(因爲在某些情況下需要對PHP代碼進行非平凡的更改),running PHP as CGI應該允許您監控實際的腳本執行情況,因爲每個CGI請求都會生成一個單獨的PHP解釋器過程,你應該能夠區分它們正在執行的腳本。但是請注意,CGI是最低效的設置(其他是mod_php和FastCGI)。

+0

感謝您的信息。好吧...因此,設置max_execution_time將阻止大部分腳本。我們目前在CGI中導致我們遇到了一些腳本問題(如frapi,它使用APC,它在FCGI中什麼都不做)。我們使用suExec作爲CGI運行PHP,我知道誰在運行腳本,但我不知道哪一個是實際的。如果我知道如何,也許我將能夠追蹤一個潛在的嵌入腳本:/。謝謝。 – Max13

+0

順便說一句,max_execution_time已經在30秒,安全模式關閉。有時候腳本仍然會執行幾個小時...目前,服務器似乎沒有問題。 – Max13

+0

您如何確定腳本正在執行幾個小時?由於您以CGI身份運行,因此您應該看到一個運行時間很長的單獨PHP進程 - 您應該查看'ps aux'中的「START」列(這是進程啓動時的掛鐘時間),而不是'TIME'(這是CPU時間,如果進程大部分空閒,可能會很低)。 – lanzz

1

可以使用ps -aux命令與一些詳細信息列表的過程。

您還可以查看ps man page

This也可能有一定的幫助。

+0

我想過,但這裏是輸出:clanrvvi 28303 0.6 0.1 167736 12968? S 11:59 0:00/usr/bin/php沒有關於腳本加載,但時間在那裏(0:00) – Max13