无法再在 Linux 服务器中打开文件!

无法再在 Linux 服务器中打开文件!

我们的 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 的值以找到适合您要求的合理数字。

相关内容