jar执行时出错 - 无法分配文件描述符表

时间:2018-03-22 17:36:28

标签: java linux

尝试在本地linux机器上使用jar时,我收到以下错误: 库初始化失败 - 无法分配文件描述符表 - 内存不足

机器有32G RAM

如果需要,我可以提供其他信息。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

在Linux的最新版本中,打开文件数量的默认限制已大大增加。 Java 8尝试为此数量的文件描述符预先分配内存是错误的事情(请参见https://bugs.openjdk.java.net/browse/JDK-8150460)。以前,当默认限制要低得多时,此方法有效,但现在,它尝试分配过多而失败。解决方法是设置打开文件数的下限(或使用较新的Java):

$ mvn
library initialization failed - unable to allocate file descriptor table - out of memoryAborted
$ ulimit -n 10000
$ mvn
[INFO] Scanning for projects...
...

答案 1 :(得分:0)

大约一周前(今天是2019年11月19日)升级了Manjaro Linux之后,在某些Java应用程序以及所有基于电子的应用程序(例如Spotify)上发生了这种情况。

此命令解决了什么问题(作为root,sudo并未这样做:

echo >/etc/security/limits.d/systemd.conf "* hard nofile 1048576"

然后重启

希望这对某人有帮助。

答案 2 :(得分:0)

我在网上发现的其他修复程序中没有一个对我有用,但是我注意到bug responsible for this defect在Java 9中,此后已解决。

我正在使用ArchLinux,因此我注意到当我尝试在elasticsearch.service中启动journalctl -xe时,它表明出于某种原因JRE8正在运行它,而实际上archlinux-java status表明了Java默认值为8。设置为Java 11可以解决我的问题:

 # archlinux-java set java-11-openjdk