為 WordPress 調整 Apache/MySQL/PHP

為 WordPress 調整 Apache/MySQL/PHP

我試圖弄清楚為什麼我的 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編譯器。您可以獲得更快的執行速度和更小的記憶體使用量。

其他用戶也許也是對的。

相關內容