Zmiana limitu zadań w warstwie systemu
Gdy mamy problem z ilością tasków w warstwie systemu. W logach można często zobaczyć podobny komunikat:
cgroup: fork rejected by pids controller in /system.slice/sshd.service
Możemy sprawdzić maksymalną dostępną ilość wątków dla systemd
$ systemctl show --property DefaultTasksMax
DefaultTasksMax=4915
Aby sprawdzić ile wykorzystano dla konkretnego demona wpisujemy np:
$ systemctl status sshd | grep -i tasks:
Tasks: 1 (limit: 4915) # tutaj 1 to używane a limit 4915
Domyślnie DefaultTaskMax jest ustawione na 15% limitu jądra
$ cat /proc/sys/kernel/pid_max
Możemy zmienić tę ilość zmieniając DefaultTasksMax w pliku
$ mcedit /etc/systemd/system.conf
DefaultTasksMax=8192
Następnie restartujemy system lub przeładowujemy konfigurację.
$ systemctl daemon-reload
Przeładowanie konfiguracji nie spowoduje zerwania połączeń.
Możemy też zwiększyć limit dla konkretnego serwisu kontrolowanego przez systemd. Poniższy przykład pokazuje, jak zwiększyć limit sshd do 8192. Utwórz nowy plik przesłaniający za pomocą:
$ systemctl edit sshd.service
[Service]
TasksMax=8192
Gdy teraz sprawdzimy ilość tasków dla serwisu
$ systemctl status shd.service
Tasks: 1 (limit: 8192)
Domyślny TasksMax limit dla użytkownika
Domyślny limit dla użytkowników powinien być dość wysoki, ponieważ sesje użytkowników wymagają więcej zasobów.
Skąd wiadomo, jakich wartości użyć? Różni się to w zależności od obciążeń zasobów systemowych i innych konfiguracji zasobów. Gdy wartość TasksMax jest zbyt niska, zobaczysz w logach komunikaty o błędach np:
cgroup: fork rejected by pids controller in /user.slice/user-0.slice/session-1.scope
Aby sprawdzić ilość tasków dla wszystkich użytkowników
$ systemctl status user.slice | grep -i Tasks:
lub dla konkretnego użytkownika
$ systemctl status user-0.slice | grep -i Tasks:
Można ustawić własne maksymalne ustawienia dla użytkowników, tworząc nowy plik, na przykład /etc/systemd/system/user-.slice.d/user-taskmask.conf. Poniższy przykład ustawia wartość domyślną 16284:
$ mkdir /etc/systemd/system/user-.slice.d
$ mcedit /etc/systemd/system/user-.slice.d/user-taskmask.conf
[Slice]
TasksMax=16284
$ systemctl daemon-reload # przeładowanie systemd
# sprawdzenie nowej wartości
$ systemctl show --property TasksMax user-.slice
TasksMax=16284