我有一个VPS(Linux服务器),我下载了64位版本的Java。在我的终端上,我可以运行如下命令:
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-0.b17.el6_7.x86_64/jre/bin/java -version
并收到以下输出:
openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed
所以为了测试我的网站,我使用了以下php:
<?php
$output = array();
exec('/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-0.b17.el6_7.x86_64/jre/bin/java -version', $output);
foreach($output as $line) {
echo $line;
echo '<br/>';
}
?>
但收到以下错误:
Error occurred during initialization of VM
Could not allocate metaspace: 1073741824 bytes
到目前为止,我已尝试过以下内容:
1)我已经更新了java的权限,以便:
stat -c "%a %n" /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-0.b17.el6_7.x86_64/jre/bin/java
返回:
755 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-0.b17.el6_7.x86_64/jre/bin/java
2)我已关闭php安全模式
3)我已将php.ini文件中的最大内存更改为1.5GB
导致此错误的原因是什么?如何让java程序无误地运行?
答案 0 :(得分:1)
您的回答在错误消息中:
Could not allocate metaspace: 1073741824 bytes
您超出了允许Apache和PHP使用的内存量。 php.ini中有限制设置,Apache用户可能设置了ulimit
。
库存PHP安装默认值通常设置为2MB的限制。 Java正在寻找1G的内存。将PHP中的内存限制更改为至少1G。
答案 1 :(得分:1)
我通过PHP方法运行了一个繁重的java程序:shell_exec和java产生了一个错误:
Error occurred during initialization of VM
Could not allocate metaspace: 1073741824 byte
Linux版本:
uname -a
Linux box1.bluehost.com 1.2.50-39.ELK6.x86_64 #1 SMP Mon Nov 2 03:10:26 CST 2015 x86_64 x86_64 x86_64 GNU/Linux
PHP版本:
php --version
PHP 5.4.43 (cgi-fcgi) (built: Jul 13 2015 15:00:01)
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
with Zend Guard Loader v3.3, Copyright (c) 1998-2013, by Zend Technologies
Java版:
java -version
java version "1.8.0_71"
在public_html下创建一个test.php脚本,如下所示:
<?php
shell_exec('java HungryJavaProgram > /home/user/mylog.log');
?>
名为HungryJavaProgram的java程序会分配一个千兆字节的内存。
在浏览器中,访问yoursite.com/test.php
以运行该php文件。 java程序报告:
Error occurred during initialization of VM
Could not allocate metaspace: 1073741824 byte
java程序请求的内存比PHP授权的内存多。
通过制作这个PHP脚本并在浏览器中访问它,了解PHP在shell_exec中运行的授权程序可以消耗多少内存:
<?php
phpinfo();
?>
查看:memory_limit
以查看默认值为:128M
在public_html下找到你的php.ini并找到memory_limit
变量并将其设置为2048M。在bluehost上,更改立即生效。现在了解一个流氓程序现在可能会关闭您的服务器。所以保持尽可能低。
在public_html目录中查看.htaccess
文件,我看到了:
AddHandler application/x-httpd-php54 .php
注释并将其替换为:
AddHandler fcgid54-script .php
现在java程序运行没有错误。即使内存限制仍然是128M,PHP似乎也没有对从shell_exec("java myprogram")
内运行的java程序强制实施限制。