php-cgi記憶體使用量高於php的記憶體限制

php-cgi記憶體使用量高於php的記憶體限制

我正在使用 Worker MPM 運行 apache,使用 fastcgi 運行 php。

以下是我的 mpm 限制:

StartServers         5
MinSpareThreads      5
MaxSpareThreads      10
ThreadLimit          64
ThreadsPerChild      10
MaxClients           10
MaxRequestsPerChild  2000

我還使用以下內容設定了 php-cgi:

PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=500

我注意到我的 php-cgi 進程平均使用大約 200+mb 的 RAM,即使它們一啟動也是如此。然而我的php記憶體限制只有128M。

這怎麼可能,我該怎麼做才能降低 php-cgi 記憶體消耗?

答案1

在某些情況下,PHP 可能會超出配置的記憶體限制(直接在擴充中分配記憶體),但我懷疑情況可能並非如此。

我注意到我的 php-cgi 進程平均使用大約 200+mb

你是如何衡量的?大多數 TXT 段將被共享 - 因此實際記憶體使用量比您在 /proc 檔案系統或 ps/top 中看到的要少得多。雖然您可以嘗試解析 lsof 的輸出,但實際上,我發現退一步查看正在進行的請求數量(例如,連接的套接字數量)並將其與報告的可用內存進行比較更為明智(更少的緩衝區/快取)。

答案2

PHP 中的記憶體限制是內部記憶體限制 - 即引擎允許使用者腳本透過其私有分配器分配的記憶體量。但除此之外,還有引擎為其內部需求分配的內存,這些內存並不總是計入限制(其中一些是,但不是全部),由庫分配的內存等等。比memory_limit設定值稍大。

另外,如上所述,工具報告的一些數字是為程式碼、堆疊、作業系統 I/O 緩衝區、庫之間的共享記憶體等分配的記憶體。

相關內容