Сбой PHP exec Java cmd с отказом в разрешении

В настоящее время я пишу несколько сценариев PHP, которые должны вызывать JAR. Я написал тестовый скрипт для тестирования Java -версии CMD.

echo exec('whoami');
echo '<hr/>';

exec('java -version', $out);
var_dump($out);

Страница возвращается, как показано ниже:

apache
array(6) { [0]=> string(134) "OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007ff705000000, 2555904, 1) failed; error='Permission denied' (errno=13)" [1]=> string(1) "#" [2]=> string(76) "# There is insufficient memory for the Java Runtime Environment to continue." [3]=> string(100) "# Native memory allocation (malloc) failed to allocate 2555904 bytes for committing reserved memory." [4]=> string(57) "# An error report file with more information is saved as:" [5]=> string(29) "# /tmp/jvm-26720/hs_error.log" }

Я протестировал cmd в консоли, и это нормально.

[root@localhost ~]# java -version
java version "1.7.0_45"
OpenJDK Runtime Environment (rhel-2.4.3.3.el6-x86_64 u45-b15)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)

Кто-нибудь может мне помочь с этим?

Обновление: вот hs_error.log

1 ответ

У меня была похожая проблема. Я продублировал его на RedHat 7 (установленном на Amazon EC2).
Только когда selinux был переключен в разрешающий режим - проблема была исправлена.

  1. Sudo или войдите как root
  2. Чтобы проверить статус: $ sestatus или же $ getenforce,
  3. Чтобы выключить это:
    • временный: $ setenforce 0,
    • навсегда: редактировать /etc/selinux/config файл

После более глубокого исследования кажется, что лучше включить "apache для использования памяти", а не выключать режим:
setsebool -P httpd_execmem 1

Больше информации здесь.

Другие вопросы по тегам