当我在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,但无济于事。 我见过人们有类似的问题,但提出的解决方案不起作用。
答案 0 :(得分:0)
将内存Xms和Xmx选项设置为java。我不是一个php人,我也分享了一些php的链接,只是验证你是否设置了两个选项。
看看你是否可以将java的进程执行分支到独立的线程并等待
What are the Xms and Xmx parameters when starting JVMs?
答案 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,错误指的是非常有用的!