web-dev-qa-db-fra.com

Nombre maximum de processus d'exécution simultanés

Le noyau indique qu'il peut prendre en charge jusqu'à 32768 identificateurs de processus sur /proc/sys/kernel/pid_max, mais combien de processus mon serveur peut-il gérer simultanément sans se plaindre de ressources ou suspendre mon serveur,

Je sais que cela dépend de chaque comportement de processus et de chaque besoin en ressources, mais existe-t-il une sorte d'équation comportant des paramètres tels que Ram, le cache, les cœurs de processeur, etc.?

Edit:

Mon serveur est hébergé sur Linode avec les spécifications suivantes:

RAM: 12 GB
CPU: Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz
cpu MHz     : 2499.970
cache size  : 4096 KB
Cores: 6 cores

Mon serveur a d'anciennes versions qui exécutent mon application,

Apache 2.2 
mysql 5.5
php 5.3
php5-fpm
1
MohammedSimba

Il existe une formule pour calculer le nombre maximal de PID ou de threads actifs. Extrait de kernel/fork.c :

_/*
 * set_max_threads
 */
static void set_max_threads(unsigned int max_threads_suggested)
{

    u64 threads;

    /*
     * The number of threads shall be limited such that the thread
     * structures may only consume a small part of the available memory.
     */
    if (fls64(totalram_pages) + fls64(PAGE_SIZE) > 64)
            threads = MAX_THREADS;
    else
            threads = div64_u64((u64) totalram_pages * (u64) PAGE_SIZE,
                                (u64) THREAD_SIZE * 8UL);

    if (threads > max_threads_suggested)
            threads = max_threads_suggested;

    max_threads = clamp_t(u64, threads, MIN_THREADS, MAX_THREADS);
}
_

Cependant, normalement, d'autres limites seront atteintes en premier. Si RAM et les autres ressources durent en dernier lieu, les limites de certains cgroup seront probablement les premières, la limite étant essentiellement:

_$ cat /sys/fs/cgroup/pids/user.slice/user-1000.slice/pids.max
12288
_

Le nombre, 12288, est identique sur mon ancien serveur de 3 gigaoctets et mon nouveau serveur de 16 gigaoctets.
Et je peux tester en essayant d’essayer d’extraire plus que le nombre maximum, ce qui donne un message dans _/var/log/kern.log_:

_Feb 12 15:49:11 s15 kernel: [  135.742278] cgroup: fork rejected by pids controller in /user.slice/user-1000.slice
_

Et en vérifiant le numéro que j'avais à l'époque:

_$ cat /sys/fs/cgroup/pids/user.slice/user-1000.slice/pids.current
12287
_

top a dit environ 12479

Mais une fois ces processus terminés, j'ai obtenu:

_$ cat /sys/fs/cgroup/pids/user.slice/pids.current
15
_

top dit environ 205, et note: 12479 - 205 + 15 = 12289

3
Doug Smythies

La réponse pourrait être des milliers, des centaines ou des dix. Cela dépend des ressources de votre ordinateur et de ce que les processus font réellement.

La meilleure chose à faire est d’exécuter votre serveur, d’étudier les ressources et d’augmenter les ressources en fonction de l’utilisation de votre serveur.

Les ressources dépendent en grande partie de la vitesse et du bélier de l'ordinateur. Le bélier permet de gérer davantage de processus en mémoire, tandis que la vitesse permet de traiter rapidement les tâches, puis de passer au processus suivant.

Si la charge de votre système est de 1,00 (peut être vérifiée en exécutant top à partir de la ligne de commande), il s'exécute alors en pleine complicité. Tout ce qui précède est un débordement pour lequel l'ordinateur s'efforce de suivre. Bien entendu, si la charge devient trop lourde, le rattrapage risque de prendre tellement de temps qu'il deviendrait pratiquement bloqué.

À propos, le 1.00 est par processeur. Donc, si vous avez un processeur à 4 cœurs, la charge sera pleine à 4,00.

Jetez un oeil à cet article pour plus de détails sur la charge:
http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages

Il faudrait donc étudier la charge avec une application telle que top pour évaluer les ressources dont vous aurez besoin pour exécuter le type de serveur et le trafic que vous avez utilisés. avoir à l'esprit.

2
L. D. James

Il n'y a pas d'autre réponse que dépend.

Que fait le processus? Dormir, attendre quelque chose sans consommer de RAM? Ensuite, vous pouvez exécuter 32768 processus. Est-ce qu'il exécute d'énormes tables de base de données? Alors beaucoup moins.

En outre, cela dépend de votre matériel. Un xeon 10 cœurs à quatre prises supportera une charge supérieure à celle d'un framboisier ...

Mon ordinateur portable compte 266 processus et une charge de 0,66, ce qui indique que la plupart d’entre eux dorment.

1
vidarlo