问题描述
我们的 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脚本启动的,而是使用系统服务启动的。系统服务在 root 用户下运行,但应用程序在“appuser”下启动。
我已经检查了 lsoft 输出,但我对这个输出并不聪明(42777 是我们的 java 进程的 PID)
lsof | awk '{ print $2 " " $1; }' | sort -rn | uniq -c | sort -rn | head -20
261798 42777 default
55071 42777 elasticse
48049 42777 cluster-C
19142 42777 java
19117 42777 MSC
12060 42777 ActiveMQ
9609 42777 CleanCurs
9570 42777 ServerSer
7227 42777 managemen
7203 42777 expiratio
7173 42777 AsyncAppe
7151 42777 Transacti
4861 42777 pool-1154
4849 42777 pool-1178
4834 42777 pool-1122
4811 42777 Deploymen
4769 42777 VM
4769 42777 Reference
4760 42777 C2
2432 42777 pool-1164
结果显示几乎有 50 万个打开的文件。如果限制为 30 000,怎么可能?
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 无关。
我们应该检查什么?
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)