2012-04-27 93 views
8

我正在運行一個wordpress站點,每個PHP進程使用大約200mb到250mb的常駐大​​小內存。使用16GB內存,服務器只能處理大約70個進程。通過將虛擬內存增加到16GB,它可以處理140.之後,負載持續上升。如果10分鐘內有200個連接,則3Ghz四核xeon處理器的服務器負載將達到20個!如何優化php進程的內存使用情況?

我已經嘗試停用所有插件,但這隻會減少每個進程的PHP內存使用量少於10%。 suPHP告訴我哪個用戶正在使用這麼多的內存,但不是wordpress代碼的哪一部分。

有關如何減少內存使用的任何建議?或者是我升級到32GB內存的唯一選擇?從PMAP

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
10585 nobody 16 0 2266m 237m 199m S 21.3 1.5 1:09.17 /usr/bin/php 
10597 nobody 16 0 2257m 255m 226m S 15.3 1.6 0:17.56 /usr/bin/php 

最大輸出-d

000000000e8b8000 27580 rw--- 000000000e8b8000 000:00000 [ anon ] 
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009 [ shmid=0x2d1b803a ] 
00002b37f2a62000 55108 r---- 0000000000000000 0fd:00000 locale-archive 
mapped: 2320852K writeable/private: 30012K shared: 2097152K 

IPCS輸出

------ Semaphore Arrays -------- 

key  semid  owner  perms  nsems 
0x000000a7 0   root  600  1 
0x00000000 162529281 nobody 600  1 
0x00000000 162562050 nobody 600  1 
0x00000000 162594819 nobody 600  1 
0x00000000 162627588 nobody 600  1 
------ Message Queues -------- 

key  msqid  owner  perms  used-bytes messages` 
+0

您是否已經嘗試安裝APC或某些類似的操作碼緩存解決方案? – raina77ow 2012-04-27 15:40:34

+0

是的。我正在使用eAccelerator和Zend Optimizer。 APC目前不包含在cPanel中。另外兩個可以用easyapache編譯。 – Lisa 2012-04-27 15:48:23

+0

奇怪的是,我正在運行一些託管服務器,大多數PHP實例消耗7到50 MB的RSS內存。我的建議是:1.升級到PHP 5.4(由於減少了內存佔用)。 2.在wordpress前安裝一些反向代理(如清漆)。 – strkol 2012-04-27 16:15:29

回答

5

我會總結一下麗莎沒有發現問題:

  • 檢查一個PHP進程的內存佈局pmap -d <pid>。輸出顯示,有由該方法中使用共享存儲器的巨大量:
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009 [ shmid=0x2d1b803a ] 
  • ipcs -m檢查共享存儲器區域。結果表明,有很多用戶沒人(Web服務器)創建的共享內存區域,這裏只是其中的幾個:
0x00000000 117964807 nobody 600 2147483648 1 dest 
0x00000000 117997576 nobody 600 2147483648 1 dest 
0x00000000 118030345 nobody 600 2147483648 1 dest 
0x00000000 118063114 nobody 600 2147483648 1 dest 
  • 禁用eAccelerator在php.ini中並刪除創建的共享內存區域:

我在`ipcs -m |剪下-d''-f2 | grep'^ [0-9]';做ipcrm -m $ i;完成

2

拉斯姆斯·勒多夫做了一個關於在Confoo PHP運行情況發佈會上,2010年,他用一個WordPress博客作爲一個例子,這應該給你很好的工具來回答你的問題:

http://talks.php.net/show/confoo10/1

綜上所述:

  • 運行phpinfo(),並禁用您不使用PHP擴展。他們可以佔用很多內存(imagick,curl,...)
  • 使用inclued.so擴展名生成包含圖。你可能會在你的wordpress設置中加載無用的函數。
  • siege運行基準。有時,微小的優化對性能有很大的影響,因此請確保您有指標,以幫助您做出決定。
  • 使用callgrind來顯示你失去表現的位置。在我的一個項目中,我使用md5()來散列我的SQL查詢並緩存它們。 md5()調用時使用20%的CPU時間。

我肯定會先禁用PHP擴展,如果可能的話。

+1

謝謝。 Strkol發現eaccelerator是問題所在。禁用時,PHP每個進程僅使用60m至80m RES。 – Lisa 2012-04-27 21:13:51

+0

@Lisa沒問題。如果您有機會,請查看Rasmus Lerdorf建議的工具。這是一個很棒的談話! – Tchoupi 2012-04-27 21:22:31

+0

問題是關於內存而不是速度優化。 – 2014-09-02 06:38:49

相關問題