在生产服务器上,有一些由用户启动的(后台)进程,这些进程通过 SSH 连接并运行一些脚本。这些进程是守护进程并持续运行。每个启动的进程都可以在 systemd 的服务下找到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
?
在具有相同操作系统的测试机器上我无法重现这一点。我启动的每个进程都可以在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 的其他发行版的行为方式。 Debian 9、SLES12、RHEL 8。它们的行为都不像第一个示例中所示的生产服务器。