我们在生产中遇到了一个问题,我怀疑这可能是由于达到 nofile 限制引起的,但我找不到跟踪或直接证据。我们在 RHEL 7 上运行。我使用lsof
下面的命令来查找用户打开的文件描述符的数量。
/sbin/lsof -u <issue_user> | awk '$4 ~ /[0-9]+[rwu -].*/'
该命令的部分awk
是仅获取以整数开头的文件描述符,并忽略 mem/rtd/cwd 等。上面的命令返回了超过 400,000 个结果,但在 中/etc/security/limits.conf
,用户的 nofile 限制为 131072。
cat /etc/security/limits.conf
...
<issue_user> hard nofile 131072
<issue_user> soft nofile 131072
...
ulimit -aH
以问题用户身份运行:
$ ulimit -aH
address space limit (Kibytes) (-M) unlimited
core file size (blocks) (-c) unlimited
cpu time (seconds) (-t) unlimited
data size (Kibytes) (-d) unlimited
file size (blocks) (-f) unlimited
locks (-x) unlimited
locked address space (Kibytes) (-l) unlimited
message queue size (Kibytes) (-q) 800
nice (-e) 0
nofile (-n) 131072
nproc (-u) 131072
pipe buffer size (bytes) (-p) 4096
max memory size (Kibytes) (-m) unlimited
rtprio (-r) 0
socket buffer size (bytes) (-b) 4096
sigpend (-i) 724561
stack size (Kibytes) (-s) 32768
swap size (Kibytes) (-w) not supported
threads (-T) not supported
process size (Kibytes) (-v) unlimited
根据/etc/security/limits.conf
,nofile 是“打开文件描述符的最大数量”。为什么该用户可以拥有比 中定义的更多的打开文件描述符limits.conf
?