我的 centos 盒子开始表现得很奇怪,ssh 日志显示:
pam_unix(sshd:session): session opened for user trading by (uid=0)
fatal: setresuid 502: Resource temporarily unavailable
在我的 cron 日志中(针对同一用户),我遇到了失败
(CRON) ERROR (setreuid failed): Resource temporarily unavailable
以该用户身份执行 ulimit -a:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 773824
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
并且 limits.d 90-nproc.conf 具有:
* soft nproc 1024
root soft nproc unlimited
但是当我使用时,该用户似乎从未获得超过~20 个进程ps -eo user=|sort|uniq -c
,但是我没有检查发生故障时的确切进程数。
我们在该机器上有少量 Java 服务,由同一用户运行。但似乎进程用完了?我们在该机器上还有 Postgres,但以不同的用户身份运行。
有什么建议吗?是否由于 1024 的限制而耗尽进程(发生故障时必定会爆发?),还是我达到了不同的资源限制。
此外,当我查看/proc/{myprocid}/limits
:
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 10485760 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 1024 773824 processes
Max open files 100000 100000 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 773824 773824 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
为什么一个进程有最大进程数?
答案1
90-nproc.conf 中的设置似乎是为了防止 fork 炸弹 —— 至少我所复制的该文件中的注释是这么说的。
查看 /etc/ssh/sshd_config,特别是“MaxStartUps”的值。尝试将其增加到 1000。如果这没有区别,为什么不增加 /etc/security/limits.conf 中的最大用户进程数的值?在我管理的服务器中,它们设置为 65535。