通过 SSH 启动的进程总计达到 SSH 守护进程 (systemd) 的限制

通过 SSH 启动的进程总计达到 SSH 守护进程 (systemd) 的限制

在生产服务器上,有一些由用户启动的(后台)进程,这些进程通过 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.sliceusing下找到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。它们的行为都不像第一个示例中所示的生产服务器。

相关内容