我们的 linux 服务器在 prod 中运行良好数周,直到我们的用户群开始增长,而我们的 java 服务器在许多地方开始出现故障!事实证明,所有文件和套接字都失败了,因为它返回“打开的文件太多”。我相信我已经达到了某种文件打开限制。
我怎样才能改变这个?ulimit 命令显示“无限”。
还有其他想法吗?
我相信这个限制是每个进程?因为我仍然可以用 vi 打开文件,例如...
这是完整的 ulimit 输出
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) 4160
max locked memory (kbytes, -l) 32
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) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
您对打开文件的限制设置为 1024,而不是无限制。使用 ulimit -n 进行更改以进行测试,并在 /etc/security/limits.conf 中更改以用于生产。
SvenW很赚钱。
补充一下,如果您不想在整个系统范围内应用新的策略;例如,生成 Java 进程的用户还执行其他职责。它很可能是根。然后,您可能希望编辑或创建一个包装器来启动您的 Java 应用程序,该应用程序
ulimit -nX
在启动之前执行。显然,您应该玩弄 X 的值来为您的要求找到一个合理的数字。