我是一名软件开发人员,主要在 Arch Linux 上使用 Java。我最近在我的开发环境和系统本身中遇到了很多资源故障。
当我启动我通常使用的所有应用程序时,系统开始抛出错误,例如:
在 zsh 中:
mlenz@loki ~/[redacted] (git)-[master] % cd ..
VCS_INFO_detect_git:9: fork failed: resource temporarily unavailable
在 Eclipse(我的 IDE)中:
Unhandled event loop exception
unable to create new native thread
在Wildfly(我们当前项目使用的应用程序服务器)启动期间:
13:19:54,962 ERROR [org.xnio.listener] (XNIO-1 I/O-2) XNIO001007: A channel event listener threw an exception: java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:714)
...
我怀疑有一些ulimit
问题,要么是nproc
要么是nofile
限制,但我设法将它们设置为一些异常大的值,但问题没有得到解决:
mlenz@loki ~ % ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-m: resident set size (kbytes) unlimited
-u: processes 256106
-n: file descriptors 65535
-l: locked-in-memory size (kbytes) 1024
-v: address space (kbytes) unlimited
-x: file locks unlimited
-i: pending signals 63787
-q: bytes in POSIX msg queues 819200
-e: max nice 0
-r: max rt priority 0
-N 15: unlimited
我还发现问题可能是系统范围的内核资源限制,例如文件句柄的数量,尽管/proc/sys/fs/file-nr
另有说明:
mlenz@loki ~ % cat /proc/sys/fs/file-nr
13312 0 1629104
我们的系统管理员检查lsof
后认为那里的行数似乎非常高,但我也检查了另一位同事的计算机,他那里的行数也同样高:
mlenz@loki ~ % lsof | wc -l
228787
我的开发环境相当不寻常,因为我通常启动 2 个 Wildfly 应用程序服务器(一个是外部系统的虚拟服务器,另一个用于我们的应用程序)。该问题似乎仅在我启动两个应用程序服务器以及我在计算机上使用的一些其他应用程序时才会出现。我的系统上运行着很多服务,因此我可能必须增加系统达到的一些限制,但我完全不知道它可能是哪一个。
我可能缺少什么想法,或者我可以检查什么来看看出了什么问题?