2012-04-27 9 views
8

Sto eseguendo un sito wordpress e ogni utilizzo del processo PHP su memoria da 200mb a 250mb di memoria residente. Con 16 GB di RAM, il server può gestire solo circa 70 processi. Aumentando la memoria virtuale a 16 GB, è possibile gestire 140. Dopo di ciò il carico continua a salire. Se ci sono 200 connessioni in 10 minuti, il carico del server raggiunge 20 su un processore xeon quad-core 3Ghz!Come ottimizzare l'utilizzo della memoria del processo php?

Ho provato a disattivare tutti i plugin, ma questo riduce solo l'utilizzo della memoria PHP di ciascun processo di meno del 10%. suPHP mi dice quale utente sta usando tanta memoria, ma non quale parte del codice wordpress.

Qualche suggerimento su come ridurre l'utilizzo della memoria? O è la mia unica opzione per l'aggiornamento a 32 GB di 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 

uscite più grandi da 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 

ipcs uscita

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

Avevi già provato a installare APC o qualche soluzione di caching opcode simile? – raina77ow

+0

Sì. Sto usando eAccelerator e Zend Optimizer. APC non è attualmente incluso in cPanel. Gli altri due possono essere compilati con easyapache. – Lisa

+0

È strano, sto utilizzando alcuni server di hosting e la maggior parte delle istanze PHP consuma tra la memoria RSS da 7 e 50 MB. I miei suggerimenti sono: 1. aggiornare a php 5.4 (a causa del ridotto ingombro di memoria). 2. Installare alcuni proxy inversi (come la vernice) davanti a wordpress. – strkol

risposta

5

cercherò di riassumere quello che Lisa ha fatto a trovare il problema:

  • Controllare il layout di memoria di un unico processo PHP con pmap -d <pid>. L'uscita ha dimostrato che c'è una quantità enorme di memoria condivisa utilizzata dal processo:
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009 [ shmid=0x2d1b803a ] 
  • esaminare le aree di memoria condivisa con ipcs -m.Ha dimostrato che ci sono un sacco di aree di memoria condivise create da nessuno utente (server web), qui sono solo alcuni di essi:
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 
  • Disabilita eAccelerator in php.ini e rimuovere le regioni di memoria condivisa create:

per i in `ipcs -m | cut -d '' -f2 | grep '^ [0-9]' `; fai ipcrm -m $ i; done

2

Rasmus Lerdorf ha fatto una conferenza sulle prestazioni di PHP a Confoo nel 2010 e ha usato un blog Wordpress come un esempio , questo dovrebbe darti ottimi strumenti per rispondere alla tua domanda:

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

Per riassumere:

  • eseguire un phpinfo() e disattivare le estensioni PHP che non si usa. Possono avere un sacco di memoria (immagine, arricciatura, ...)
  • Generare un grafico dei tuoi include usando l'estensione inclued.so. Potresti caricare funzioni inutili nella configurazione di wordpress.
  • Eseguire benchmark con siege. A volte, le ottimizzazioni minime hanno un grande impatto sulle prestazioni, quindi assicurati di avere le metriche, per aiutarti a prendere le tue decisioni.
  • Utilizzare callgrind per mostrare dove stai perdendo le prestazioni. In uno dei miei progetti stavo usando md5() per cancellare le mie query SQL e memorizzarle nella cache. Le chiamate md5() in cui viene utilizzato il 20% del tempo della CPU.

Inizierei sicuramente disabilitando le estensioni PHP, se possibile.

+1

Grazie. Strkol ha scoperto che il problema è l'acceleratore. Quando disabilitato, PHP utilizza solo RES di 60 ma 80 m per processo. – Lisa

+0

@Lisa Nessun problema. Scopri gli strumenti suggeriti da Rasmus Lerdorf se ne hai la possibilità. E 'stato un discorso fantastico! – Tchoupi

+0

La domanda riguarda la memoria e non l'ottimizzazione della velocità. –

Problemi correlati