Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jar执行时出错-无法分配文件描述符表_Java_Linux - Fatal编程技术网

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

Java jar执行时出错-无法分配文件描述符表,java,linux,Java,Linux,在尝试在本地linux机器上使用jar时,出现以下错误: 库初始化失败-无法分配文件描述符表-内存不足 这台机器有32G的RAM 如果需要,我可以提供更多信息 任何帮助都将不胜感激。在最新版本的Linux中,打开文件数量的默认限制已显著增加。Java8做了一件错误的事情,试图为这个数量的文件描述符预先分配内存(请参阅)。以前,当默认限制要低得多时,这是可行的,但现在它试图分配太多,结果失败了。解决方法是设置打开文件数的下限(或使用较新的java): 在大约一周前(今天是2019年11月19日)升

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

这台机器有32G的RAM

如果需要,我可以提供更多信息


任何帮助都将不胜感激。

在最新版本的Linux中,打开文件数量的默认限制已显著增加。Java8做了一件错误的事情,试图为这个数量的文件描述符预先分配内存(请参阅)。以前,当默认限制要低得多时,这是可行的,但现在它试图分配太多,结果失败了。解决方法是设置打开文件数的下限(或使用较新的java):


在大约一周前(今天是2019年11月19日)升级了我的Manjaro Linux之后,我在一些Java应用程序和所有基于电子的应用程序(如Spotify)上遇到过这种情况吗

修复它的是这个命令(作为root用户,sudo没有这么做:

echo >/etc/security/limits.d/systemd.conf "* hard nofile 1048576"
然后重新启动


希望这对其他人有所帮助。

我在网上找到的其他修复程序都不适用于我,但是我注意到问题是在Java 9中解决的,并且从那时起就得到了解决

我在ArchLinux上,所以我注意到,当我试图在
journalctl-xe
中启动
elasticsearch.service
时,它表明出于某种原因JRE8正在运行它,实际上
ArchLinux java status
表明java 8是默认值。设置为java 11为我解决了这个问题:

 # archlinux-java set java-11-openjdk

您可以在调用JVM时尝试使用-Xmx标志增加JVM堆内存大小。请参阅我已经尝试过这样做,不幸的是,这没有帮助。尝试使用jVisualVM检查应用程序。您可以更好地了解内存是如何增长的。此外,您还可以使用名为VisualGC的插件查看GC活动,这将提供对JVM中各种内存区域的行为有很好的理解。我只是遇到了相同的错误。您可以尝试启用内存过度使用,方法是将
/proc/sys/vm/overcommit\u memory
设置为1。这对我来说很有效。对我来说很有效,花了好几个小时来解决这个问题……只需像
echo“ulimit-n 10000>/root/.bashrc”这样简单地执行smth即可
 # archlinux-java set java-11-openjdk