Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 打开的文件太多第二卷_Java_Linux_Ulimit - Fatal编程技术网

Java 打开的文件太多第二卷

Java 打开的文件太多第二卷,java,linux,ulimit,Java,Linux,Ulimit,我们在JBoss服务器上面临“打开的文件太多”的问题 “appuser”的ulimit设置为: core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals

我们在JBoss服务器上面临“打开的文件太多”的问题

“appuser”的ulimit设置为:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 46987
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 30000
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) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
新版本开始出现问题,jboss不是通过sh脚本启动的,而是使用系统服务启动的。系统服务在根用户下运行,但应用程序在“appuser”下启动

我已经检查了lsoft输出,但从这个输出来看我并不聪明(42777是我们java进程的PID)

结果显示,几乎有50万个打开的文件。如果限额是30000,怎么可能呢

此命令显示打开文件的所有不同值

ls -d /proc/[1-9]*/fd/*|cut -d/ -f3|sort |uniq -c |sort -rn|head

2743 42777
     91 1352
     51 1
     28 609
     19 861
     16 860
     16 844
     15 1090
     13 1098
     13 1097
当应用程序启动失败时,ls-d命令还返回大约2500个打开的文件,这与我们设置为30000的限制无关

我们应该检查什么


谢谢

您可以先检查流程中提到的打开的实际文件路径(请参见lsof NAME列),因为这通常与不可靠的文件处理源有关,而您的应用程序可能没有在访问文件后使用
try(){}
进行资源处理或清理。谢谢。这里确实有助于为我们的启动服务设置参数LimitNOFILE=30000。
ls -d /proc/[1-9]*/fd/*|cut -d/ -f3|sort |uniq -c |sort -rn|head

2743 42777
     91 1352
     51 1
     28 609
     19 861
     16 860
     16 844
     15 1090
     13 1098
     13 1097