
我試圖弄清楚為什麼我的 apache 進程佔用了這麼多內存
我的切片規格(1.5GB RAM、CentOS 5、Apache2、PHP 5.2、MySQL)
正如您所看到的,我的頂級進程消耗了近一半的內存,當產生更多進程時,伺服器幾乎停止運行,經常進入交換狀態並崩潰。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6817 apache 40 0 296m 103m 3920 S 0.0 6.7 0:03.52 httpd
6789 apache 40 0 295m 101m 3932 S 0.0 6.6 0:07.04 httpd
6765 apache 40 0 284m 91m 3948 S 55.1 5.9 0:12.45 httpd
6798 apache 40 0 284m 90m 3944 S 0.0 5.9 0:05.49 httpd
6542 apache 40 0 283m 90m 3956 S 0.0 5.8 0:43.25 httpd
6827 apache 40 0 283m 88m 3796 S 0.0 5.7 0:01.83 httpd
有誰知道什麼可能導致 apache (和 php)消耗如此多的記憶體?
total used free shared buffers cached
Mem: 1545 827 718 0 3 111
-/+ buffers/cache: 713 832
Swap: 3071 103 2968
答案1
您幾乎肯定正在執行 mod_php,這表示您幾乎肯定正在 mpm_prefork 中執行 apache。
如果在負載導致您開始交換之前效能總體上還不錯,那麼快速修復方法就是開始限制 apache 的 MaxClients。如果允許 apache 隨時分叉工作進程,它將在負載下開始交換。請求將排隊直到有可用的工作人員,因此事情可能會變慢,但不會像死亡交換那麼慢。
如果您確實需要更嚴格地調整,請考慮放棄 prefork apache mpm。這意味著將 PHP 作為 FastCGI 運行。如果您打算在 FastCGI 下使用 PHP,您應該考慮升級到 PHP 5.3.3,它具有更好的 FastCGI 進程管理器(--enable-fpm 配置選項)。
php-fpm/worker 比老式 mod_php 的記憶體更有效率。然後,您可以獨立於 PHP 進程數來調整 apache 進程/執行緒數。並且佔用大量記憶體的 PHP 進程僅用於提供 php 驅動的內容,而不是浪費在提供靜態檔案上。
答案2
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6817 apache 40 0 296m 103m 3920 S 0.0 6.7 0:03.52 httpd
6789 apache 40 0 295m 101m 3932 S 0.0 6.6 0:07.04 httpd
6765 apache 40 0 284m 91m 3948 S 55.1 5.9 0:12.45 httpd
6798 apache 40 0 284m 90m 3944 S 0.0 5.9 0:05.49 httpd
6542 apache 40 0 283m 90m 3956 S 0.0 5.8 0:43.25 httpd
6827 apache 40 0 283m 88m 3796 S 0.0 5.7 0:01.83 httpd
WordPress 是唯一在 apache 上運行的東西嗎?我主要好奇的是 PID 6765 的 cpu 使用率非常高。想知道它在做什麼。就 mem%s 而言,這對於 Web 應用程式設定來說看起來很正常,因為每個執行緒實際上運行多個工作執行緒。
您對 apache 使用什麼 MPM?
另外,如果您要發佈終端轉儲,請每行以四個空格開始。它允許保留格式。
答案3
我的水晶球有點灰塵,但我猜你正在使用記憶體快取及其 PHP 擴充。如果是這種情況,請嘗試停用它,除非您確實需要它。
另一種可能性是您有某種操作碼緩存,例如X快取、已安裝並已將其配置為使用大量記憶體。
你可以嘗試
pmap -x `pidof apache`
查看什麼消耗了記憶體。
答案4
不要載入未使用的 apache 模組(如 python、perl 等)。
使用 eAccelerator php 模組。它是php編譯器。您可以獲得更快的執行速度和更小的記憶體使用量。
其他用戶也許也是對的。