Ich habe einen 64-Bit-Server, aber nur 256 MB RAM. Also bin ich mit Fast-CGI auf den Nginx-Server umgezogen, um eine Verbindung zu PHP herzustellen. Ich habe PHP 5.3.6 ausgeführt.
Das Problem ist, dass ich alle zwei oder drei Tage, wenn ich versuche, auf eine PHP-Seite zuzugreifen, einen serverinternen Fehler erhalte. Die einzige Möglichkeit besteht darin, php-fpm manuell neu zu starten. Dies bedeutet, dass ich einige falsche Parameter hätte einstellen sollen, die dazu führen, dass es erstickt. Unten habe ich die relevanten Konfigurationen aufgelistet.
/etc/php-fpm.conf: -
include=/etc/php-fpm.d/*.conf
log_level = error
;emergency_restart_threshold = 0
;emergency_restart_interval = 0
;process_control_timeout = 0
/etc/php-fpm.d/www.conf: -
[www]
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 500
/etc/nginx/php.conf: -
location ~ \.php {
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_pass unix:---some-location---;
}
Update 1
Und ich habe vier Nginx-Prozesse ausgeführt. Im Durchschnitt benötigt jeder PHP-Fpm-Prozess 35 MB RAM (Größe des virtuellen Speichers jeweils 320 MB). Ich habe auch einen MySQL-Prozess ausgeführt.
Update 2
Ich habe vergessen, die Protokolle einzufügen.
PHP-Fpm-Fehlerprotokoll: -
WARNING: [pool www] seems busy (you may need to increase start_servers, or min/max_spare_servers), spawning 8 children, there are 1 idle, and 7 total children
WARNING: [pool www] server reached max_children setting (10), consider raising it
NOTICE: Terminating ...
php-fpm www.error log: -
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 122880 bytes) in /home/webadmin/blog.applegrew.com/html/wordpress/wp-content/plugins/jetpack/class.jetpack-signature.php on line 137
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 122880 bytes) in /home/webadmin/blog.applegrew.com/html/wordpress/wp-content/plugins/jetpack/class.jetpack-signature.php on line 137
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 122880 bytes) in /home/webadmin/blog.applegrew.com/html/wordpress/wp-content/plugins/jetpack/class.jetpack-signature.php on line 137
quelle
free
und fange an. Ich teile diesen freien Speicher durch 35, um den zu erhaltenmax_children value
. Ich habe den Zweck des letzten Absatzes nicht verstanden.max_children
zu 3.free
berücksichtigen Sie? Die aus der Zeile '- / + Puffer / Cache', die für den Festplatten-Cache verwendet wird, aber für Apps tatsächlich kostenlos ist?Ihr PHP-Fpm-Setup scheint in Ordnung zu sein.
Der Server, den Sie ausführen, ist jedoch etwas ressourcenbeschränkt. Aus den Protokollen geht hervor, dass PHP-Prozesse den verfügbaren Speicher erschöpfen.
Hinzufügen zu den Vorschlägen von cyberx86:
Sie können versuchen, den Parameter memory_limit in der Datei php.ini zu bearbeiten (siehe hier ) (obwohl ich nicht sicher bin, ob es viel Gutes bringt).
Angesichts des geringen Systemspeichers sollten Sie ernsthaft in Betracht ziehen, auf ein 32-Bit-Betriebssystem umzusteigen. Die Verwendung eines x64-Betriebssystems schadet Ihnen eher, als dass Sie davon profitieren.
Wenn Sie keinen InnoDB-Speicher in Ihrer MySQL-Datenbank verwenden, können Sie auch InnoDB in Ihrer my.cnf deaktivieren. Dadurch werden weitere 100 MB RAM eingespart.
Lowendbox bietet ein großartiges Tutorial zum Optimieren von Servern für eine Konfiguration mit wenig Arbeitsspeicher.
quelle
Ein sehr praktischer Befehl, um den von PHP belegten Speicher zu finden:
Dann teilen Sie den RAM, den Sie PHP widmen möchten, und Sie haben Ihren max_children-Wert!
Sie können auch manuell (Sie müssen den Endpunkt-PHP-Status einrichten) oder mit Nagios überwachen.
quelle
awk: fatal: division by zero attempted
ps --no-headers -o "rss,cmd" | grep php5-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
Irgendwie funktionieren die Optionen -C nicht.