![開発環境の使用中に「フォークに失敗しました」](https://rvso.com/image/83690/%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%AE%E4%BD%BF%E7%94%A8%E4%B8%AD%E3%81%AB%E3%80%8C%E3%83%95%E3%82%A9%E3%83%BC%E3%82%AF%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%8D.png)
私は主に 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 つはアプリケーション用です)。問題は、両方のアプリケーション サーバーを起動し、コンピューターで使用する他のアプリケーションも起動した場合にのみ発生するようです。システムでは多数のサービスが実行されているため、システムの制限を増やす必要があるかもしれませんが、それがどれなのかはまったくわかりません。
何が足りないのか、何が問題なのかを確認するために何をチェックすればよいのか、何かアイデアはありますか?