CentOS上的Java:没有足够的内存

时间:2016-08-29 09:34:16

标签: java php linux

当我在PHP中发出命令时:

exec('java -version > test.txt');

创建了文件test.txt但内部有错误:

  

Java Runtime Environment没有足够的内存   继续。

     

本机内存分配(mmap)无法映射2555904个字节   保留记忆。

包含更多信息的错误报告文件保存为: /tmp/hs_err_pid25505.log

此位置的错误报告文件不存在

当我尝试在shell窗口中执行相同的命令时,它可以工作:

openjdk version "1.8.0_101"

  

OpenJDK运行时环境(版本1.8.0_101-b13)OpenJDK 64位   服务器VM(版本25.101-b13,混合模式)

我正在尝试执行的命令实际上不是java -version,而是一个更复杂的命令。但结果是一样的。

我认为问题来自PHP。 到现在为止,我试图增加memory_limit,但无济于事。 我见过人们有类似的问题,但提出的解决方案不起作用。

2 个答案:

答案 0 :(得分:0)

将内存Xms和Xmx选项设置为java。我不是一个php人,我也分享了一些php的链接,只是验证你是否设置了两个选项。

看看你是否可以将java的进程执行分支到独立的线程并等待

What are the Xms and Xmx parameters when starting JVMs?

PHP : settings memory_limits > 1024M does not work

ini_set("memory_limit") in PHP 5.3.3 is not working at all

答案 1 :(得分:0)

JVM永远不会耗尽内存。它预先对堆栈进行内存计算。

Structure of the JVM, Chapter 3,第3.5.2节说明:

  
      
  • 如果可以动态扩展Java虚拟机堆栈,并尝试进行扩展,但可以使内存不足   实现扩展,或者如果内存不足   可用于为新的创建初始Java虚拟机堆栈   线程,Java虚拟机抛出OutOfMemoryError
  •   

对于,第3.5.3节。

  
      
  • 如果计算需要的堆数超过自动存储管理系统(Java虚拟机)可用的堆   抛出OutOfMemoryError
  •   

看起来你正在达到最大内存限制:Java要求的远远超过PHP(/ apache!)所提供的并且无法获得它。奇怪的是它不是那么多,但最有可能包括JRE图像本身,所以它会更多。

检查和/或提高PHP内存限制(/etc/php.ini),如:

memory_limit = 128M

根据配置,您也可以在.php中执行此操作:

ini_set('memory_limit', '128M');

如果发布/tmp/hs_err_pid25505.log,错误指的是非常有用的!