Bei der Überprüfung der Anwendung eines Clients auf einem virtuellen Server eines Drittanbieters bemerkte ich ein faszinierendes Phänomen: Einzelne PHP-Prozesse scheinen mehr als einen Kern zu verwenden. Soweit ich weiß, kann PHP das nicht tun.
Verhaltensbeschreibung
Hier ist die Ausgabe von htop bei der Bearbeitung einer einzelnen Anfrage an die Web-Anwendung:
Ausgabe von htop, grün als user cpu und rot als system cpu
Alle vier Kerne sind zu 100%, es gibt nur einen PHP-Prozess mit 396% CPU und die Speicherauslastung ist niedrig.
Ich habe bereits die hohe System-CPU mit Strace oder Pidstat untersucht, konnte aber keine IO-Probleme finden.
Serverinformationen
Der virtuelle Server ist eine Debain LAMP-Umgebung mit Intels VT-X-Virtualisierung und Virtuozzo mit 4 Kernen bei 560 MHz:
Ausgabe von lscpu
Auf dem Server läuft PHP 5.5.9 in schnellem CGI, das von Apache 2.4.7 (Prefork) bedient wird.
Nginx 1.9.4 dient als Revere-Proxy, Plesk 12.5 wird zum Konfigurieren des Servers verwendet.
Beispiel PHP-Code (EDIT)
Um den Anwendungscode als Quelle auszuschließen, habe ich das Verhalten mit einem einfachen Codecode bestätigt:
Zwei oder mehr PHP-Prozesse (EDIT) Wenn zwei oder mehr Anfragen gleichzeitig bearbeitet werden, läuft jeder Prozess auf so vielen Kernen wie möglich (2 Prozesse = & gt; 2 Kerne, jeweils 3 Prozesse = & gt; 1,33 Kerne).
Fragen
Ja, es heißt Pthreads. Es wurde entwickelt, um echtes Multi-Threading in PHP zu realisieren.
Unwahrscheinlich. Ich denke das gleiche wie Will sagte, es ist wahrscheinlich ein Sub-Prozess von PHP gestartet.
Es ist vollständig an die Anwendung gebunden. Aber jede von php gestartete Multi-Core-Aufgabe könnte so auftauchen. Eine Java-App für das Rastern eines Bucket mit Svg-Image zum Beispiel.
Tags und Links php virtualization virtuozzo