gpt4 book ai didi

java - php exec() for java on website 不工作,但工作在服务器终端

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:12:47 25 4
gpt4 key购买 nike

我有一个 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 程序无错误地运行?

最佳答案

我能够使用 bluehost 的网络空间重现此错误并修复它。

我正在通过 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 程序分配了 1 GB 的内存。

从浏览器访问 yoursite.com/test.php 以运行该 php 文件。 java 程序报告:

Error occurred during initialization of VM
Could not allocate metaspace: 1073741824 byte

为什么会这样?

java 程序请求了比 PHP 授权更多的内存。

解决方案 #1,增加可用内存:

通过制作这个 PHP 脚本并在浏览器中访问它,找出 PHP 授权在 shell_exec 中运行的程序可以消耗多少内存:

<?php
phpinfo();
?>

看:memory_limit看默认是:128M

在 public_html 下找到您的 php.ini 并找到 memory_limit 变量并将其设置为 2048M。在 bluehost 上,更改会立即生效。现在了解一个流氓程序现在可能会导致您的服务器崩溃。因此,请保持尽可能低的水平。

解决方案 #2,使用 PHP fastcgi。

在 public_html 目录中查看 .htaccess 文件,我看到了这个:

AddHandler application/x-httpd-php54 .php

将其注释掉并替换为:

AddHandler fcgid54-script .php

现在 java 程序运行没有错误。即使内存限制保持在 128M,PHP 似乎并未对从 shell_exec("java myprogram") 中运行的 java 程序强制执行该限制。

关于java - php exec() for java on website 不工作,但工作在服务器终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34620280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com