2012-04-27 29 views
8

Używam strony z wordpress i każdy proces PHP używa około 200mb do 250mb pamięci rozmiaru rezydentnego. Dzięki 16 GB pamięci RAM serwer może obsłużyć tylko około 70 procesów. Zwiększając pamięć wirtualną do 16 GB, może obsłużyć 140. Po tym obciążenie stale rośnie. Jeśli w ciągu 10 minut będzie 200 połączeń, obciążenie serwera osiągnie 20 na czterordzeniowym procesorze xeon 3Ghz!Jak zoptymalizować wykorzystanie pamięci procesowej PHP?

Próbowałem dezaktywować wszystkie wtyczki, ale to tylko zmniejsza użycie pamięci PHP każdego procesu o mniej niż 10%. SuPHP mówi mi, który użytkownik używa tak dużo pamięci, ale nie jaką część kodu wordpress.

Wszelkie sugestie dotyczące zmniejszenia zużycia pamięci? Czy moja jedyna możliwość uaktualnienia do 32 GB pamięci RAM?

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 

Największe wyjścia z pmap -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 

IPC wyjściowe

------ 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

Czy próbowałeś już zainstalować APC lub inne podobne rozwiązanie do buforowania opcode? – raina77ow

+0

Tak. Używam eAccelerator i Zend Optimizer. APC nie jest obecnie objęty cPanel. Pozostałe dwie mogą być skompilowane z easyapache. – Lisa

+0

To dziwne, mam kilka serwerów hostingowych i większość instancji PHP zużywa od 7 do 50 MB pamięci RSS. Moje sugestie to: 1. uaktualnienie do php 5.4 (ze względu na zredukowany ślad pamięci). 2. Zainstaluj trochę odwrotnego proxy (jak lakier) przed wordpress. – strkol

Odpowiedz

5

będę podsumować to, co zrobiła Lisa znaleźć problem:

  • sprawdzić układ pamięci pojedynczego procesu PHP z pmap -d <pid>. Wyjście wykazały, że istnieje ogromna ilość pamięci dzielonej używany przez proces:
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009 [ shmid=0x2d1b803a ] 
  • Zbadać wspólne obszary pamięci z ipcs -m.Okazało się, że istnieje wiele wspólnych obszarów pamięci utworzonych przez użytkownika nobody (serwer WWW), oto tylko kilka z nich:
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 
  • Wyłącz eAccelerator w php.ini i usunąć utworzone współdzielonych obszarów pamięci:

for i in `ipcs -m | cut -d '' -f2 | grep '^ [0-9]' `; do ipcrm -m $ i; gotowe

2

Rasmus Lerdorf zrobił konferencję o wydajności PHP w Confoo w 2010 roku użył bloga Wordpress jako przykład , to powinno dać ci świetne narzędzia, by odpowiedzieć na twoje pytanie:

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

Podsumowując:

  • Uruchom phpinfo() i wyłączyć rozszerzenia PHP, które nie korzystają. Mogą zająć dużo pamięci (zdjęcia, zawijasy, ...)
  • Wygeneruj wykres swoich załączników za pomocą rozszerzenia inclued.so. Możesz załadować niepotrzebne funkcje w swojej konfiguracji wordpress.
  • Przeprowadzaj testy porównawcze za pomocą siege. Czasami niewielkie optymalizacje mają duży wpływ na wydajność, więc upewnij się, że masz metryki, które pomogą Ci podejmować decyzje.
  • Użyj callgrind, aby pokazać, gdzie tracisz wydajność. W jednym z moich projektów używałem md5() do mieszania moich zapytań SQL i ich buforowania. md5() wywołuje miejsce, w którym zużywa 20% czasu procesora.

Zdecydowanie zacznę od wyłączenia rozszerzeń PHP, jeśli to możliwe.

+1

Dziękuję. Strkol odkrył, że problemem jest eaccelerator. Po wyłączeniu PHP używa tylko 60m do 80m OZE na proces. – Lisa

+0

@Lisa Bez problemu. Sprawdź narzędzia sugerowane przez Rasmus Lerdorf, jeśli masz taką możliwość. To była niesamowita rozmowa! – Tchoupi

+0

Pytanie dotyczy pamięci, a nie optymalizacji prędkości. –

Powiązane problemy