我们最近在 Debian 9 上的生产 Wildfly 17 中遇到了“打开文件过多”错误。只需重新启动 wildfly 服务即可消除错误,但我想避免问题再次出现。我想增加限制,但不确定应该更改什么,以及如何知道配置已被考虑在内。
我检查了未登录的 wildfly 用户的 ulimit:
sudo su - wildfly -c 'ulimit -a' -s '/bin/bash'
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 117724
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 117724
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
对于用户来说,限制似乎设置为 1024。但是我可以检查 wildfly 进程打开的文件数,结果如下:
sudo ls -l /proc/PID/fd |wc -l
1296
这比限制大,但我现在没有收到任何错误。有没有办法永久地将限制设置为更高?也许在 wildfly 配置文件中?我有点迷茫了。
答案1
您需要编辑/添加记录/etc/security/limits.conf
。例如,用户wildfly
和打开文件数的一条记录可能如下所示:
wildfly soft nofile 16384
wildfly hard nofile 16384
设置用户打开文件数为 16384
PS 您应该注销然后登录(以用户身份wildfly
)才能使这项工作正常进行
答案2
cat /proc/ 'pid' /limits | grep files 将显示 wildfly 进程特定的最大打开文件的值。
lsof -a -p 'pid' | wc -l 将显示特定 pid 的当前打开文件数