it-swarm.com.de

Ich sehe Pids über 400.000, warum ist das so? Zeigt es an, dass etwas nicht stimmt?

Heute habe ich gerade bemerkt, dass meine Prozess-IDs mit 400.000 (d. H. 449624) sehr hoch sind. Wenn ich ps -ef | more, da habe ich es bemerkt. Ist das normal oder deutet das auf ein Problem hin? Ansonsten laufen die Skripte einwandfrei.

Ich benutze Redhat 7.3 x64 Bit.

Eine andere Sache, die mir aufgefallen ist, ist, dass wir auch Redhat 7.2 haben und die Pids nicht so hoch sind, nur auf neueren Betriebssystemen. Warum sollte das so sein? Bedeutet das, dass es mit dem Betriebssystem zusammenhängt und normal ist?

Ich habe das nicht kernel_pid_max in meinem sysctl.conf. Ich lief Katze /proc/sys/kernel/pid_max und ich sehe 458752.

14
user5352090

Beim Booten passt der Kernel den Standardwert pid_max Abhängig von der Anzahl der verfügbaren CPUs an. Wenn die Anzahl niedrig ist, wird der übliche 32768 ausgewählt. Andernfalls wird die Berechnung wie folgt durchgeführt (hier wird ein 3.10-Kernel gezeigt, der RHEL ähnelt, aber abgesehen von einigen Variationen ist er für jeden neueren Linux-Kernel gleich):

include/linux/threads.h :

/* 
 * Hiermit wird die maximale maximale PID gesteuert, die einem Prozess zugewiesen wird. 
 */
 # PID_MAX_DEFAULT definieren (CONFIG_BASE_SMALL? 0x1000: 0x8000) 

0x8000 = 32768 ist der übliche Wert, der auf Systemen mit weniger als 32 verfügbaren CPU-Threads verwendet wird.

und später:

 # definiere PIDS_PER_CPU_DEFAULT 1024 

Diese Werte werden dann in kernel/pid.c verwendet:

int pid_max = PID_MAX_DEFAULT;

und später :

/* Bump Default und Minimum pid_max basierend auf der Anzahl der CPUs */
 Pid_max = min (pid_max_max, max_t (int, pid_max, 
 PIDS_PER_CPU_DEFAULT * num_possible_cpus ()); .____.] pid_max_min = max_t (int, pid_max_min, 
 PIDS_PER_CPU_MIN * num_possible_cpus ()); 
 pr_info ("pid_max: Standard:% u Minimum:% u\n", pid_max, pid_m_ ; 

Ab OP sollte dies also insgesamt 458752/1024 = 448 gleichzeitig verfügbare Threads bedeuten: ziemlich viel. Das andere System hat wahrscheinlich nicht so viele CPUs/Kerne/Threads usw., hat also einen niedrigeren Standard pid_max.

19
A.B

Von die proc -Dokumentation :

Auf 32-Bit-Plattformen ist 32768 der Maximalwert für pid_max. Auf 64-Bit-Systemen kann pid_max auf einen beliebigen Wert von bis zu 2 ^ 22 eingestellt werden (PID_MAX_LIMIT, ca. 4 Millionen).

Sie können das mit cat /proc/sys/kernel/pid_max Sehen. Sie können dies auch mit sysctl abfragen.

Sudo sysctl -a | grep kernel.pid_max

Oder:

sysctl -n kernel.pid_max

Ändern Sie /etc/sysctl.conf, Um den Wert dauerhaft zu ändern, und laden Sie ihn mit sysctl -p Neu.

16
JRFerguson

Eine Prozess-ID kann ein beliebiger Wert sein, der durch den Typ pid_t Dargestellt wird, der für Ihr Betriebssystem spezifisch ist. In der Praxis handelt es sich normalerweise um eine 32-Bit-Ganzzahl mit Vorzeichen, was bedeutet, dass die maximale Prozess-ID 2147483647 beträgt oder ungefähr 5000-mal größer ist als die beobachteten Prozess-IDs.

Die GNU-Dokumentation sagt:

Datentyp: pid_t

Der Datentyp pid_t Ist ein vorzeichenbehafteter Integer-Typ, der eine Prozess-ID darstellen kann. In der Bibliothek GNU C) ist dies ein int.

In der Praxis erzwingt der Kernel normalerweise eine Untergrenze, die niedriger als diese ist. Auf einem Linux-System wird dies durch /proc/sys/kernel/pid_max Gesteuert, der standardmäßig 32768 ist. Wenn Ihr System Linux ist, können Sie diese Datei überprüfen, um festzustellen, wie hoch das aktuelle Limit ist.

Die Grenze kann auf verschiedenen Betriebssystemen unterschiedlich sein. Zum Beispiel scheint nter macOS ist PID_MAX als 99999 fest codiert .

7
Daniel Pryden