프로덕션 서버에는 SSH를 통해 연결하고 일부 스크립트를 실행하는 일부 사용자 시작(백그라운드) 프로세스가 있습니다. 이러한 프로세스는 데몬이며 지속적으로 실행됩니다. 시작된 각 프로세스는 systemd의 services 에서 찾을 수 있습니다 sshd
.
user@host:~> systemctl status sshd
● sshd.service - OpenSSH Daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled)
Active: active (running) since Di 2019-10-15 12:25:34 EDT; 1 day 16h ago
Process: 48099 ExecStartPre=/usr/sbin/sshd-gen-keys-start (code=exited, status=0/SUCCESS)
Main PID: 48106 (sshd)
Tasks: 464 (limit: 512)
CGroup: /system.slice/sshd.service
|- ...
|- ...
보시다시피 작업 수가 상당히 많아 지난 며칠 동안 여러 번 한도에 도달했습니다. 이로 인해 더 이상 SSH를 통해 연결할 수 없는 문제가 발생했습니다. 그리고 SSH를 사용하여 새 프로세스를 시작할 수 없습니다. 이러한 프로세스 중 일부는 종료하는 것도 불가능합니다. 프로세스를 포크할 수 없다는 bash 오류가 계속 발생합니다.
이것이 올바른 행동입니까 systemd
?
동일한 OS를 사용하는 테스트 시스템에서는 이를 재현할 수 없습니다. 내가 시작하는 모든 프로세스는 user.slice
using 에서 찾을 수 있습니다 systemctl
.
예상한 대로 sshd 서비스가 비어 있는 것 같습니다.
● sshd.service - OpenSSH Daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled)
Active: active (running) since Fr 2019-06-28 07:37:03 CEST; 3 months 19 days ago
Process: 1925 ExecStartPre=/usr/sbin/sshd-gen-keys-start (code=exited, status=0/SUCCESS)
Main PID: 1972 (sshd)
Tasks: 1 (limit: 512)
CGroup: /system.slice/sshd.service
└─1972 /usr/sbin/sshd -D
cron 서비스에서도 같은 일이 발생합니다. cronjob에 의해 시작된 모든 프로세스는 cron 서비스 아래에 나열되며 때로는 512라는 한계에 도달하기도 합니다.
내 문제는 또한 어떤 구성 매개변수가 이 동작을 일으키는지 확인할 수 없다는 것입니다. 모든 conf 파일을 비교해 보았 /etc/systemd/
으나 차이점이 발견되지 않았습니다.
또한 systemd를 사용하는 여러 다른 배포판이 어떻게 작동하는지 확인했습니다. 데비안 9, SLES12, RHEL 8. 이들 중 어느 것도 첫 번째 예에 표시된 프로덕션 서버처럼 작동하지 않습니다.