尝试在本地linux机器上使用jar时,我收到以下错误: 库初始化失败 - 无法分配文件描述符表 - 内存不足
机器有32G RAM
如果需要,我可以提供其他信息。
任何帮助都将不胜感激。
答案 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