在尝试在本地Linux机器上使用jar文件时,我遇到了以下错误:
库初始化失败-无法分配文件描述符表-内存不足
该机器有32G的RAM
如果需要,我可以提供额外的信息。
任何帮助将不胜感激。
最近版本的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...
...
echo "ulimit -n 10000 >> /root/.bashrc"
即可。 - thi gg我在升级Manjaro Linux约一周后,发现我的一些Java应用程序和所有基于Electron的应用程序(如Spotify)出现了这种情况。以下命令(作为root用户,sudo无法解决问题)解决了这个问题:
echo >/etc/security/limits.d/systemd.conf "* hard nofile 1048576"
我在网上找到的其他解决方法都没用,但是我注意到导致这个缺陷的错误在Java 9中,并且已经被解决了。
我使用的是ArchLinux,当我尝试启动elasticsearch.service
时,在journalctl -xe
中显示由于某种原因JRE8在运行它,而archlinux-java status
确实显示Java 8是默认值。将其设置为Java 11后问题得到解决:
# archlinux-java set java-11-openjdk
/proc/sys/vm/overcommit_memory
设置为1。这对我有用。 - Dario Seidl