我们的 Linux 服务器在生产环境中运行了数周,但随着用户群的增长,我们的 Java 服务器开始在许多地方出现故障!结果发现所有文件和套接字都出现故障,因为它返回“打开的文件过多”。我认为我已经达到了某种文件打开限制。
我该如何改变这种情况?ulimit 命令显示“unlimit”。
还有其他想法吗?
我相信这个限制是针对每个进程的?因为我仍然可以使用 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
答案1
您对打开文件的限制设置为 1024,而不是无限制。使用 ulimit -n 进行更改以进行测试,并在 /etc/security/limits.conf 中进行更改以用于生产用途。
答案2
斯文很有钱。
补充一下,如果您不想在整个系统范围内应用新策略;例如,生成 Java 进程的用户还执行其他任务。它很可能是 root。然后您可能希望编辑或创建一个用于启动 Java 应用程序的包装器,该包装器ulimit -nX
在启动之前执行。显然,您应该尝试 X 的值以找到适合您要求的合理数字。