私は主に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アプリケーションサーバーを起動するという点で非常に珍しいです(1つは外部システム用の仮想サーバー、もう1つは私たちのアプリケーション用)。問題は、2つのアプリケーションサーバーとコンピュータで使用されている他のいくつかのアプリケーションを起動したときにのみ発生するようです。私のシステムで多くのサービスが実行されているので、システムが到達する制限の一部を増やす必要があるかもしれませんが、どちらが起こるのかわかりません。
私が見逃した可能性があるアイデア、または何が間違っているかを確認するために確認できるものはありますか?