myk*_*myk 5 pam cgroup systemd ubuntu-20.04
有一个用 C/C++ 编写的小型服务器程序,使用 nginx 和 Postgres,目前都托管在同一个 ubuntu 系统上。我通常从 bash 命令行运行服务器程序。
\n最近在较新版本的 Ubuntu 上,当服务器程序运行时,大约半分钟后我无法执行任何其他命令;如果屏幕保存,则我无法重新登录。终止我的服务器程序将恢复正常行为。
\n在 bash 中:按 ENTER 键输入任意命令:
\nbash: fork: retry: Resource temporarily unavailable\nRun Code Online (Sandbox Code Playgroud)\n并将以下内容写入 /var/log/syslog:
\nSep 5 09:46:08 ubuntu kernel: [ 145.614883] cgroup: fork rejected by pids controller in /user.slice/user-1000.slice/user@1000.service\nRun Code Online (Sandbox Code Playgroud)\n系统重新启动后启动服务器程序与系统运行一段时间后启动服务器程序的体验是不同的。具体来说,重新启动后,服务器程序将正常运行。如果服务器程序重新启动,它将以 60% 的利用率运行半分钟,然后跳至 80% 约 5 秒,然后降至 20% 的利用率。看起来好像有什么东西直接限制了应用程序。C组?
\nPAM 配置: \n在 /etc/pam.d/common-session 中有以下行:
\nsession required pam_unix.so \nsession optional pam_systemd.so \nRun Code Online (Sandbox Code Playgroud)\n我不认为这有什么区别,但在 /etc/security/limits.d/91-nofile.conf 中我设置了以下 PAM 设置:
\n* soft nofile 350000\n* hard nofile 350000\n* soft nproc 100000\n* hard nproc 100000\n* soft sigpending 100000\n* hard sigpending 100000\nRun Code Online (Sandbox Code Playgroud)\nCGroups/Systemd 配置:
\nmyk@ubuntu:/etc/systemd/system$ systemctl status user.slice \n\xe2\x97\x8f user.slice - User and Session Slice\n Loaded: loaded (/lib/systemd/system/user.slice; static; vendor preset: ena>\n Active: active since Sat 2020-09-05 10:47:19 +08; 38min ago\n Docs: man:systemd.special(7)\n Tasks: 1396\n Memory: 1.0G\n CGroup: /user.slice\n \xe2\x94\x94\xe2\x94\x80user-1000.slice\n \xe2\x94\x9c\xe2\x94\x80session-2.scope\n\nmyk@ubuntu:~$ systemctl status user-1000.slice \nuser-1000.slice - User Slice of UID 1000\n Loaded: loaded\n Drop-In: /usr/lib/systemd/system/user-.slice.d\n \xe2\x94\x94\xe2\x94\x8010-defaults.conf\n Active: active since Sat 2020-09-05 09:44:50 +08; 21min ago\n Docs: man:user@.service(5)\n Tasks: 340 (limit: 15479)\n Memory: 1.6G\n\ncat /proc/sys/kernel/threads-max\n46907\n\ncat /sys/fs/cgroup/pids/user.slice/user-1000.slice/pids.max\n15479\nRun Code Online (Sandbox Code Playgroud)\n在 /etc/systemd/system.conf 中尝试添加:
\nDefaultMemoryAccounting=no\nDefaultTasksAccounting=no\nRun Code Online (Sandbox Code Playgroud)\n没有成功。这确实导致“systemctl status user-1000.slice”不再显示任务限制
\n在 /etc/systemd/logind.conf 中尝试添加:
\nUserTasksMax=infinity\nRun Code Online (Sandbox Code Playgroud)\n没有成功
\n在 /etc/systemd/system.conf\n中更改:
\n#DefaultTasksMax=\nRun Code Online (Sandbox Code Playgroud)\n到:
\nDefaultTasksMax=infinity\nRun Code Online (Sandbox Code Playgroud)\n没有成功
\nUbuntu 在 MBP 上的 MacO 托管的 VM-Ware 下运行。Pmstat 显示 MBC 上的热量正常。乌班图20.04;虚拟机 11.6.5;MacOS 10.15.6
\n问题: \n是否有某种方法可以配置 cgroups / pam / systemd / etc 以便在服务器程序运行时能够继续使用命令行/能够在屏幕保存时重新登录?
\n通过更改 /usr/lib/systemd/system/user-.slice.d/10-defaults.conf 解决了此问题
改变:
最大任务数=33%
读书:
任务最大=无穷大
| 归档时间: |
|
| 查看次数: |
6073 次 |
| 最近记录: |