无法将用户切换到 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#
Ulimit 设置
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#
答案1
仅重新启动 postgres 并不是一个长期的解决方案,您将再次达到限制,除非您的服务器上存在内存等物理资源限制。在出现问题期间,postgres 用户打开的进程数 (nproc) 为 503,估计打开的文件数 (nofile) 为 35225,但您的postgres_limits.conf
显示仅设置nproc
为 400 和nofile
4096。根据您的数据,您需要增加这两个参数。