本番サーバーには、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を使用するさまざまなディストリビューションがどのように機能するかを確認しました。 Debian 9、SLES12、RHEL 8. これらのどれも、最初の例に示されている本番サーバーのようには機能しません。