2011-02-18 13 views
5

當APC緩存已滿時,它會掛起Apache。 Apache響應請求,但是會永遠等待APC緩存釋放一些資源,但這絕不會發生。如何在PHP APC緩存完全填滿時阻止Apache掛起?

我每隔10分鐘運行一次CRON作業,使用我自己的小型清除腳本,該腳本從APC中刪除過期的條目。好的,我可以給APC增加更多內存和/或我可以更頻繁地運行清除腳本。但這不是真正的解決方案,我正在尋找一些新的方法來處理問題。

回答

1

這不是最終的解決方案,但我寫了我在我的問題中提出的小PHP APC expunge script。該腳本每10分鐘由CRON運行,並手動刪除過期的項目。這遠遠不是完美的解決方案,但至少它有很大的幫助。

我雖然仍在尋找最終解決方案。

0

您可以嘗試將代碼行添加到經常執行的腳本中,以檢查緩存是否已滿,如果是,則處理該腳本。 這種腳本的一個例子可能是建立到數據庫的連接的腳本。

+0

那麼,在每個腳本調用中執行這樣的腳本都會減慢每個腳本的響應時間。而且大多數情況下不需要,因爲緩存的使用處於最低水平。所以我會更頻繁地執行cron作業,比如說5分鐘。 但我仍然更喜歡一些更優雅的方法,如Apache識別錯誤並重新啓動自己....但我還沒有發現任何關於此可能的功能.... – Frodik 2011-02-18 10:35:26

1

我發現設置ttl會在緩存滿時改變APC的行爲。默認情況下,如果ttl爲0,APC必須在緩存滿時清空它。從手動:

在耗盡 可用存儲器的高速緩存的情況下,高速緩存將是 完全抹去如果TTL等於0 否則,如果TTL是大於0,APC將嘗試刪除 過期條目。

+0

嗯,但這並不完全發生。當APC緩存完全滿時,它會掛起,Apache也會掛起。它接受新的連接,但他們沒有完成。 有很多項目已過期,但APC不會刪除它們(邏輯上應該)。 ttl是0還是更大並不重要。 – Frodik 2011-03-08 19:44:22