Controllo dell'applicazione di un client su un server virtuale di terze parti Ho notato un fenomeno intrigante: I singoli processi PHP sembrano utilizzare più di un core. Per quanto ne so, PHP non può farlo.In che modo PHP utilizza più del 100% della CPU?
descrizione problem
seguito il risultato di htop durante la manipolazione una singola richiesta all'applicazione web:
Produzione di htop, verde CPU in uso e l'essere rosso CPU sistema
Tutto quattro core sono al 100%, c'è solo un processo PHP al 396% della CPU e l'utilizzo della memoria è basso.
Ho già studiato l'alta cpu del sistema usando strace o pidstat ma non ho trovato alcun problema di I/O.
informazioni Server
Il server virtuale è un ambiente Debain LAMP utilizzando virtualizzazione VT-x di Intel e Virtuozzo offrendo 4 core a 560 MHz:
uscita di lscpu
Il server esegue PHP 5.5.9 in CGI veloce servito da apache 2.4.7 (prefork). Nginx 1.9.4 serve come proxy reverese, Plesk 12.5 è usato per configurare il server.
Esempio di codice PHP (EDIT)
Per escludere il codice applicazioni come sorgente ho confermato il comportamento utilizzando un semplice pezzo di codice:
$array = array('z', 'y', 'x', 'h', 'd', 's', 'w', 'q', 'a');
for ($i=0; $i < 9999999; $i++) {
sort($array); // Delaying execution
}
echo 'loop ended';
Due o più processi PHP (EDIT) Se due o più richieste vengono gestite simultaneamente, ogni processo viene eseguito su più core possibile (2 processi => 2 core ciascuno, 3 processi => 1,33 core ciascuno).
Domande
- è possibile per PHP per utilizzare più di un core contemporaneamente?
- Potrebbe essere correlato alla virtualizzazione?
- Follow-Up: quale potrebbe essere il motivo per cui l'utilizzo della CPU di sistema è dominante?
Questo potrebbe sicuramente essere causato dal codice in esecuzione all'interno di PHP. Cosa sta facendo? – Will
Grazie per il tuo contributo, Will. Ho effettivamente testato il comportamento utilizzando un semplice ciclo for e lo posso confermare. Ho aggiunto il caso di test alla domanda. – PvB
Ah, capito! Grazie. Onestamente, se abbiamo escluso il codice, potrebbe essere necessario migrare questo a ServerFault, in quanto potrebbe ottenere il giusto tipo di occhi lì. Per quanto ne so, un singolo lavoratore PHP FastCGI non può utilizzare più core. Ma, in teoria, lo scheduler di Linux potrebbe cambiare il processo tra le CPU. Hmm ... – Will