Apache 2.2 mpm_worker: più thread o più processi?


17

Quando si utilizza Worker MPM in Apache, è possibile giocherellare con il numero di processi figlio e il numero di thread del server per processo figlio.

Quali sono i vantaggi e gli svantaggi di ciascuno? In quali circostanze aumenteresti l'uno o l'altro?

Risposte:


25

Finora, queste sono state le mie considerazioni principali nel determinare Threads vs Processes:

  1. I thread utilizzeranno molta meno memoria residente rispetto ai processi. Sì, con le librerie collegate dinamicamente viene condivisa molta memoria tra il processo di controllo Apache e i relativi processi figlio, tuttavia ogni nuovo processo dovrà creare un'istanza di tutti i moduli abilitati.

    Ciò è facilmente verificabile confrontando l'utilizzo della memoria di ciascun processo in cui sono presenti, ad esempio, 5 processi e 1 thread ciascuno o 5 processi e 25 thread ciascuno. Nel mio caso qui, ogni processo figlio richiede circa 7 MB indipendentemente dalla quantità di thread.

    + Per discussioni

  2. Ci vuole più tempo per iniziare in termini di tempo e cicli di CPU per caricare un nuovo processo di quanto non faccia un thread. Questo può essere testato verificando la quantità media di pagine pubblicate tramite 'ab'.

    + Per discussioni

  3. A Process I thread dipendono tutti dal processo. La preoccupazione principale qui è che se succede qualcosa al processo, questo influenzerà tutti i thread ad esso associati. Se stai eseguendo un singolo processo con un sacco di thread, quando il processo muore, lo stesso accade per i thread. Più processi causerebbero quindi una migliore separazione, e quindi una maggiore tolleranza "ai guasti" se lo desideri.

    + Per i processi

  4. Relativamente a (3), per moduli come PHP, la loro memoria viene caricata dal processo e condivisa tra tutti i thread. Ciò significa che se hai php con memory_limit impostato su 100 Mb con 25 thread sotto, quindi al massimo carico tecnicamente ogni thread sarà in grado di allocare un massimo di 4 MB ciascuno (ovviamente non accadrà in questo modo, alcuni si porteranno, alcuni lo faranno morire di fame).

Quindi, alla fine, dipende davvero dal tuo caso d'uso. Detto questo, vorrai massimizzare la quantità di thread utilizzati in modo da ridurre l'utilizzo della memoria e aumentare la reattività. Tuttavia, dovrai bilanciarlo con una quantità adeguata di processi per una migliore tolleranza agli errori.

Naturalmente non sono un esperto qui perché solo recentemente mi sono dovuto preoccupare di questo, quindi non vedo l'ora di vedere quali altre risposte potrebbero apparire qui!


1
+1 per alcune buone informazioni generali. Mi piacerebbe vedere più profondità / dettagli concreti, se possibile, però.
sh-beta,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.