Önyükleme sırasında, çekirdek pid_max
kullanılabilir CPU sayısına bağlı olarak varsayılanı ayarlar . Sayı düşük olduğunda, normal 32768 seçilir. Başka hesaplama şu şekilde yapılır (burada RHEL'e benzer bir 3.10 çekirdek gösteriliyor, ancak bazı varyasyonların yanı sıra son Linux çekirdeği için de aynı):
include/linux/threads.h
:
/ *
* Bu, bir işleme ayrılan varsayılan maksimum pid'i kontrol eder
* /
#define PID_MAX_DEFAULT (CONFIG_BASE_SMALL? 0x1000: 0x8000)
0x8000 = 32768, 32 cpu'dan az iş parçacığı bulunan sistemlerde kullanılan normal değerdir.
ve sonra:
#define PIDS_PER_CPU_DEFAULT 1024
Bu değerler daha sonra şu alanlarda kullanılır kernel/pid.c
:
int pid_max = PID_MAX_DEFAULT;
ve daha sonra :
/ * cpus sayısına göre varsayılan ve minimum pid_max çarpma * /
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: varsayılan: minimum% u minimum:% u \ n", pid_max, pid_max_min);
Bu nedenle OP'den toplam 458752/1024 = 448 eşzamanlı iş parçacığı mevcut olmalıdır: oldukça fazla. Diğer sistemde muhtemelen çok fazla CPU / çekirdek / iş parçacığı vb pid_max
. Bulunmadığından varsayılan değer daha düşüktür .
kernel_pid_max
Gözlerinde farklısysctl.conf
olması gerektiği çünkükernel.pid_max
.