Ich versuche, einen Webserver auf einem VPS einzurichten. Mein Problem ist, dass die Speichernutzung von PHP-CGI-Prozessen im Laufe der Zeit zunimmt, obwohl die Website überhaupt keinen Datenverkehr empfängt. (Es befindet sich vorerst hinter einer Firewall.)
Der VPS verfügt über 360 MB RAM. Ich verwende Debian Lenny 32bit und seine Pakete lighttpd und php5-cgi. Abgesehen von einigen Konfigurationsänderungen (unten aufgeführt) verwende ich das Standard-Setup von Debian.
Die Website basiert auf Drupal. Mit dem Entwicklungsmodul von Drupal kann ich feststellen, dass die Speichernutzung von PHP-Skripten im Durchschnitt weniger als 20 KB beträgt und 8 MB nie überschreitet.
Hier sind die relevanten Teile aus der Ausgabe von 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
- Ist es normal, php-cgi so groß zu haben?
- Ist es möglich, die Speichernutzung von PHP-CGI basierend auf den Einstellungen zu schätzen?
- Irgendwelche Tipps zur Reduzierung des Speicherverbrauchs von PHP-CGI-Prozessen?
Die Suche nach bekannten Speicherleck-Fehlern ergab nichts Relevantes. Und ich wäre überrascht, wenn die Standard-Debian-Pakete / -Konfiguration einen so offensichtlichen Speicherverlust hätten. Andere Benutzer auf demselben Host haben dieses Problem nicht.
Was ich bisher gemacht habe, ist PHP_FCGI_MAX_REQUESTS
auf einen niedrigen Wert eingestellt, damit PHP-CGI-Prozesse schnell recycelt werden. Wenn ich ab
hohe Lasten simuliere, funktioniert das sehr gut. Prozesse sterben schnell ab, bevor sie höher als 10 MB werden. Unter niedriger bis mittlerer Last wachsen jedoch alle Prozesse stetig (aufgrund des Lastausgleichs) und die meisten verbrauchen gleichzeitig 28 MB +, wodurch mein VPS dem Risiko eines Austauschs ausgesetzt ist. Bitte beachten Sie, dass die Prozesse auch ohne jeglichen Datenverkehr stetig wachsen.
Ich kann die Anzahl der PHP-CGI-Prozesse reduzieren, aber dies scheint mehr eine Problemumgehung als eine Lösung zu sein. Ich wäre überrascht, wenn php-cgi normalerweise so wachsen würde.
Das Summieren der gesamten RSS-Nummern für PHP-CGI-Prozesse ergibt außerdem:
$ ps -C php-cgi -o rss= | awk '{s+=$1}END{print s/1024}'
195.738
Gibt jedoch free -m
die folgende Ausgabe:
total used free shared buffers cached
Mem: 360 351 8 0 33 190
-/+ buffers/cache: 127 232
Swap: 255 0 255
- Vermisse ich etwas Wie kommt es, dass der verwendete Speicher (ohne Puffer) niedriger ist als der gesamte residente Speicher von PHP-CGI-Prozessen auf dem Host?
Ich habe die folgenden PHP-Erweiterungen:
php5-cgi php5-common php5-curl php5-gd php5-mysql php5-xcache
xcache.size
ist auf 24M eingestellt. Früher waren es 32 Millionen, aber das Reduzieren hat nicht geholfen. xcache.var_size
wird auf 0 gesetzt. Die restlichen Plugins verwenden die Standardkonfiguration. Die xcache-Administrationsseiten zeigen, dass xcache weniger als 1 MB verwendet.
PHPs memory_limit
sind auf 32M eingestellt.
Hier ist meine FastCGI-Konfiguration:
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"
))
)
Ich verwende mehr oder weniger den Bestand lighttpd.conf
, der mit Debian geliefert wird.
Bitte lassen Sie mich wissen, ob ich weitere Daten zur Verfügung stellen kann.
Jede Hilfe wird geschätzt. Ich habe seit Tagen versucht, dies zu beheben. Ich habe keine Ideen mehr.
Oft sind diese Probleme auf einen Op-Code-Cache wie XCache oder eine zwischengespeicherte PHP-Erweiterung zurückzuführen.
quelle
Entfernen Sie nicht verwendete Bibliotheken aus /etc/php5/apache2/conf.d. Wahrscheinlich brauchen Sie nicht pdo.ini und pdo_mysq.ini oder mysqli.ini. Dies spart ein paar Mega Ram
quelle