Linux
su: /bin/bash: 資源暫時不可用
無法將使用者切換到 postgres。
postgres 使用者的 Ulimit 設置設置了合理的限制。我們沒有達到最大值。
/var/log/messages 中沒有錯誤。
錯誤:
BETA -bash-4.2# sudo su - postgres su: /bin/bash: Resource temporarily unavailable
設置:
BETA -bash-4.2# ps -auxww | grep -i postgr | wc -l 503 BETA -bash-4.2# lsof | grep -i postgr | wc -l 35225 BETA -bash-4.2#
用於 postgres 程序的 Ulimit。
BETA -bash-4.2# cat /proc/26230/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 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 256580 256580 processes Max open files 1024 4096 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 256580 256580 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us
網路統計
BETA -bash-4.2# netstat -plan | grep -i post | grep ESTABLISHED | wc -l 496 BETA -bash-4.2#
超限設置
BETA -bash-4.2# cat /etc/security/limits.d/postgres_limits.conf # Limits settings for postgres postgres soft nofile 4096 postgres hard nofile 4096 postgres soft nproc 400 postgres hard nproc 400
重新啟動postgres後,我能夠進入。
postgres 使用者的資源工具。
BETA -bash-4.2# netstat -plan | grep -i post | grep ESTABLISHED | wc -l 1 BETA -bash-4.2# BETA -bash-4.2# lsof | grep -i postgr | wc -l 309 BETA -bash-4.2# ps -auxww | grep -i postgr | wc -l 8 BETA -bash-4.2#
僅僅重啟 postgres 不是一個長期的解決方案,你會再次達到極限,除非你在伺服器上有物理資源限制,比如記憶體。在問題期間,postgres 使用者打開的程序數(nproc)為 503,打開文件的估計數(nofile)為 35225,但您
postgres_limits.conf
顯示您已設置nproc
為僅 400 和nofile
僅 4096。根據您的數據,您將需要增加這兩個參數。