Sto cercando di configurare un server Web su un VPS. Il mio problema è che l'utilizzo della memoria dei processi php-cgi aumenta nel tempo anche se il sito Web non riceve alcun traffico. (per il momento è protetto da un firewall)
Il VPS ha una RAM di 360 MB. Sto usando Debian Lenny a 32 bit e i suoi pacchetti lighttpd e php5-cgi. A parte alcune modifiche alla configurazione (elencate di seguito), sto usando la configurazione stock di Debian.
Il sito Web si basa su Drupal. Utilizzando il modulo di sviluppo di Drupal, posso dire che l'utilizzo della memoria degli script PHP è in media inferiore a 20 KB e non supera mai gli 8 MB.
Ecco le parti rilevanti dall'output di ps aux
:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 29871 0.0 1.7 54552 6368 ? Ss Aug12 0:00 /usr/bin/php-cgi
www-data 29873 0.0 7.4 65808 27468 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29874 0.0 3.7 55808 13736 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29875 0.0 4.3 58040 16204 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29876 0.0 4.4 57444 16288 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29877 0.0 1.7 54552 6368 ? Ss Aug12 0:00 /usr/bin/php-cgi
www-data 29879 0.0 9.6 67140 35684 ? S Aug12 0:26 /usr/bin/php-cgi
www-data 29880 0.0 6.6 59172 24492 ? S Aug12 0:23 /usr/bin/php-cgi
www-data 29881 0.0 7.1 59784 26388 ? S Aug12 0:22 /usr/bin/php-cgi
www-data 29882 0.0 7.4 60880 27440 ? S Aug12 0:23 /usr/bin/php-cgi
- È normale avere php-cgi così grande?
- È possibile stimare l'utilizzo della memoria php-cgi in base alle impostazioni?
- Qualche consiglio per ridurre il consumo di memoria dei processi php-cgi?
La ricerca di bug noti che perdono memoria non ha prodotto nulla di rilevante. E sarei sorpreso se i pacchetti / configurazione Debian predefiniti presentassero una perdita di memoria così evidente. Altri utenti sullo stesso host non presentano questo problema.
Quello che ho fatto finora è impostato PHP_FCGI_MAX_REQUESTS
su un valore basso in modo che i processi php-cgi vengano riciclati rapidamente. Quando uso ab
per simulare un carico elevato, funziona molto bene. I processi muoiono rapidamente prima di crescere oltre i 10 MB. Tuttavia, con un carico medio-basso, tutti i processi crescono costantemente (a causa del bilanciamento del carico) e la maggior parte consuma contemporaneamente 28 MB +, mettendo il mio VPS a rischio di scambio. Si prega di notare che anche senza alcun tipo di traffico, i processi crescono costantemente.
Posso ridurre il numero di processi php-cgi, ma sembra una soluzione più che una soluzione. Sarei sorpreso se php-cgi normalmente cresceva così.
Inoltre, sommando i numeri RSS totali per i processi php-cgi si ottiene:
$ ps -C php-cgi -o rss= | awk '{s+=$1}END{print s/1024}'
195.738
Tuttavia, free -m
fornisce il seguente output:
total used free shared buffers cached
Mem: 360 351 8 0 33 190
-/+ buffers/cache: 127 232
Swap: 255 0 255
- Mi sto perdendo qualcosa? Come mai la memoria utilizzata (senza buffer) è inferiore alla memoria residente totale dei processi php-cgi sull'host?
Ho le seguenti estensioni PHP:
php5-cgi php5-comune php5-curl php5-gd php5-mysql php5-xcache
xcache.size
è impostato su 24M. Una volta era 32M ma ridurlo non aiutava. xcache.var_size
è impostato su 0. I plug-in rimanenti utilizzano la configurazione stock. Le pagine di amministrazione di xcache mostrano che xcache utilizza meno di 1 MB.
PHP memory_limit
è impostato su 32M.
Ecco la mia configurazione FastCGI:
fastcgi.server = ( ".php" =>
((
"bin-path" => "/usr/bin/php-cgi",
"socket" => "/tmp/php.socket",
"max-procs" => 2,
"idle-timeout" => 20,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "4",
"PHP_FCGI_MAX_REQUESTS" => "1000"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
))
)
Sto usando più o meno lo stock lighttpd.conf
fornito con Debian.
Per favore fatemi sapere se ci sono altri dati che posso fornire.
Qualsiasi aiuto è apprezzato. Ho provato a risolvere questo problema per giorni. Ho finito le idee.