gpt4 book ai didi

java - root 和其他帐户使用的文件描述多于 ulimit 配置的文件描述

转载 作者:太空宇宙 更新时间:2023-11-04 09:47:58 25 4
gpt4 key购买 nike

现在我下这个问题已经被问过,但每个人似乎都显示软限制。我关心的是进程如何拥有比硬限制更多的文件描述符 (fd),这对性能意味着什么?

根据其他在线文章,硬限制就是一个硬上限,所以这意味着如果命中就会崩溃?

我应该补充一点,现在系统还没有崩溃,并且目前运行得还不错。我只是想看看如何改进性能,以及对已经存在 15 年的软件带来的好处。

配置

这是一个运行 JAVA 的 Web 服务器,将数据从其他设备传递到 postgresql。

]# cat /proc/sys/fs/file-max
20854863

]# cat /proc/sys/fs/file-nr
43320 0 20854863

运行 su 命令只是为了显示这是针对 root 帐户的。

]# su - root -c "ulimit -Hn -Hu"
open files (-n) 4096
max user processes (-u) 819554

分析

root正在运行923进程

]# lsof -u root | awk '{ print$2 }' | uniq -c | wc -l
923

其中有一个进程的 fd 比配置的要多

]# lsof -u root | awk '{ print$2 }' | uniq -c | 
...
10823 2550
...
]# ls -l /proc/2550/fd/ | wc -l
10675

因此,根据配置,我们可以拥有比打开文件更多的进程,但系统看不到这一点。我们还有另一个用户,公司特定名称,它也有同样的问题。硬限制为 4096,但一个进程的打开文件数为 13112。

此后,我们已将公司的根号增加到 16000,但尚未更改 root,因为我希望了解发生了什么情况。

问题

系统使用的 fd 数量如何超过了硬限制配置的数量?

对于 fork 过程,这是由系统还是您正在编写的应用程序完成的?就我们的软件而言,如果 java 有足够的 fd,似乎很乐意在一个进程下运行。

如果我们将其与 postgres 服务进行比较,一旦达到软限制,postgres 就会很高兴地旋转更多进程,或者只需要做其他事情。

]# lsof -u postgres | awk '{ print$2 }' | uniq -c
1 PID
678 1064
741 1067
766 1131
561 1446
681 1447
1034 36122
912 54028
951 54195
1026 56139
... about a dozen more records

最佳答案

事实证明,问题与“左手不知道右手在做什么”有关。似乎一个团队正在从系统级别设置限制,但其他团队正在通过 /etc/default/jetty 中的配置文件进行设置。取决于 jetty 是从交互式 shell 触发还是从非交互式 shell 触发,具体取决于它所使用的设置。

换句话说。限制较高,因为 /etc/default/jetty 中的限制设置得高于系统。

关于java - root 和其他帐户使用的文件描述多于 ulimit 配置的文件描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55184614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com