Article ID: 113007, created on Sep 25, 2013, last review on May 10, 2014

  • Applies to:
  • Plesk 12.0 for Linux

Soluzione

Prefork:
 
L'MPM prefork utilizza vari processi secondari, ciascuno con un thread. Ogni processo gestisce una connessione per volta. In molti sistemi, prefork fornisce una velocità paragonabile a worker, ma consuma più memoria. Il design senza thread di prefork offre vantaggi rispetto a worker in alcune situazioni: è utilizzabile con moduli di terze parti non thread-safe ed è più gestibile nelle piattaforme con scarso supporto di debug dei thread.
 
    * Sviluppato in Apache 1
    * Vari processi secondari, con 1 thread per processo secondario; i processi secondari gestiscono le richieste
    * Migliore isolamento e stabilità
    * Testato per operare correttamente con Parallels Plesk Panel
   
svantaggi:
* Il consumo di memoria è superiore e le prestazioni sono inferiori rispetto agli MPM con thread
 
Worker:
 
L'MPM worker utilizza vari processi secondari, ciascuno con molti thread. Ogni thread gestisce una connessione per volta. Worker rappresenta la scelta ottimale per i server a traffico elevato, in quanto il footprint di memoria è ridotto a confronto dell'MPM prefork.
 
    * Sviluppato in Apache 2 oltre al modulo prefork
    * Vari processi, con molti thread per processo; i thread gestiscono le richieste
    * Il consumo di memoria è inferiore e le prestazioni sono superiori
   
svantaggi:
* Non assicura lo stesso livello di isolamento da una richiesta a quella successiva a confronto dell'MPM basato sui processi
* Se un thread singolo viene sospeso/sfugge al controllo, l'intero processo viene arrestato e ciò influisce su tutti i thread.
* Richiede un processore thread-safe per gestire il contenuto dinamico
* Non è supportato da Parallels Plesk Panel
 
Ogni modulo presenta un set diverso di direttive di configurazione nel file di configurazione del server Web Apache:
 
Prefork:
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

 Worker:
<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

Informazioni:

Nelle distribuzioni Linux basate su Red Hat, per impostazione predefinita il server Web Apache è configurato per l'esecuzione con il modulo prefork. Dal punto di vista tecnico, è possibile passare al modulo worker se si ritiene che sia più adatto per le proprie esigenze, tuttavia è necessario tenere in considerazione il seguente avviso.

Attenzione: Parallels Plesk Panel non è stato testato con l'MPM worker Apache e, se lo si installa in Debian/Ubuntu, il pacchetto "psa" viene rimosso.

Se si desidera comunque passare al modulo worker, è sufficiente non commentare questa direttiva nel file  /etc/sysconfig/httpd:
# grep HTTPD= /etc/sysconfig/httpd
#HTTPD=/usr/sbin/httpd.worker
and restart Apache:
/etc/init.d/httpd restart

 L'MPM worker presuppone la configurazione/il caricamento di un modulo PHP speciale da parte del server Web Apache:
# cat /etc/httpd/conf.d/php.conf|grep -A3 "worker.c"
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

Alla fine, la domanda più frequente posta da clienti e tecnici è: come stabilire su quale modulo MPM è in esecuzione il server?
 
Innanzitutto, avvalersi dell'utility  ps per determinare la riga di comando di un processo Apache in esecuzione:
# ps aux | grep -v grep | egrep "apache|httpd"
root      1684  0.0  1.4 284484 14888 ?        Ss   17:52   0:00 /usr/sbin/httpd
apache    3101  0.0  0.7 284484  7596 ?        S    18:02   0:00 /usr/sbin/httpd

 e verificare quale modulo è attivo utilizzando questo comando:
# /usr/sbin/httpd -l | egrep "prefork|worker"

  In alternativa, verificare il file di configurazione  /etc/sysconfig/httpd:
# grep -B 5 HTTPD= /etc/sysconfig/httpd
# The default processing model (MPM) is the process-based
# "prefork" model. A thread-based model, "worker," is also
# available, but does not work with some modules (such as PHP).
# The service must be stopped before changing this variable.
#
#HTTPD=/usr/sbin/httpd.worker

Informazioni aggiuntive

 MPM prefork Apache

MPM worker Apache

 

a914db3fdc7a53ddcfd1b2db8f5a1b9c 29d1e90fd304f01e6420fbe60f66f838 56797cefb1efc9130f7c48a7d1db0f0c 2a5151f57629129e26ff206d171fbb5f e335d9adf7edffca6a8af8039031a4c7

Email subscription for changes to this article
Save as PDF