
我的 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
而 limit.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。在我管理的伺服器中,它們設定為 65535。