2012-04-03 70 views
5

我正在用PHP編寫守護進程。大學時我沒有參加OS課。所以,我想知道,我需要查看哪些服務器/其他統計信息,以確保我的守護進程不消耗太多系統資源,並且可以在有更多mysql記錄時進行擴展。基本上,我的守護進程正在處理一堆mysql錶行。岩石上的守護進程

例如,我明白我需要看到守護程序花費的時間來處理一定的行數,並且它使用的內存量。但是,我如何確定它是否在泄漏內存?另外,我應該通過哪些其他系統參數來判斷守護進程?

+0

通過讓守護進程將條目寫入磁盤上的日誌文件,可以獲得所需的一些內容。例如,你可以在每次處理另外100行時寫出時間和消息。通過讀取日誌文件,您將獲得守護程序特定的信息。使用unix命令行工具可以顯示內存,處理器和磁盤使用情況統計信息。 – Jazz 2012-04-03 17:02:17

+0

CPU使用率/內存使用情況/ iowait將成爲您的主要擔憂。 – Corbin 2012-04-04 05:06:12

+0

如果你超載CPU,使用PHP中的'usleep'放慢速度。你只是用&來背景守護進程嗎? – halfer 2012-04-04 06:16:12

回答

2

但是,我怎麼確定它是否泄漏內存?

你在這裏問的東西與操作系統無關。你很關心內存使用情況。這個問題的正確答案超出了這篇文章的範圍,但您可能想先看看引用計數如何工作以進行內存管理,並確保您已在PHP安裝中配置了循環引用檢查器。當你發現mysql客戶端在運行時阻止PHP並忽略PHP的內存限制時,情節會變得更加嚴重 - 所以如果你獲取的結果集太大,在mysql_query返回並且代碼崩潰之前你不會知道它的情況:總是使用查詢中的LIMIT(或PK選擇)以及首選在守護程序下運行守護進程。使用不同的內存限制進行測試,比您打算在生產中使用時低。

注意,PHP纔會開始製作更多的可用內存本身通過垃圾收集時,它認爲它的運行內存。

寫很多東西到日誌文件!

0

取決於你如何去執行守護火了起來,在linux頂部,然後把它處理很多行(100K +,或東西,需時約30秒,執行)的你預計什麼。查看內存使用情況的增長速度:小任務發生得太快,需要運行過程。

然後請確保您未設置($ objectOrString),靠近只要你使用的是他們做了所有文件和連接到數據庫:這會有所幫助。

再次,這取決於這個文件將被做你可能要讓它終止,並使用cron作業來啓動它agian使PHP可以爲你運行垃圾收集。