Napisałem prosty plik PHP, który wywołuje aplikację Java.
Działa bez problemu na cli, ale nie mogę uruchomić go w przeglądarce.
Wynik:
"Java HotSpot(TM) 64-Bit Server VM warning: INFO:os::commit_memory(0x00007ff590053000, 2555904, 1) failed; error='Permission denied' (errno=13)
# # There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 2555904 bytes for committing reserved memory.
# An error report file with more information is saved as: # /tmp/hs_err_pid14930.log "
Jak mogę to naprawić?
Odpowiedzi:
Wygląda na to, że osiągasz maksymalny limit pamięci: Java prosi o około 2,5 MB i nie może go uzyskać. Dziwne, że nie jest tak wiele, ale najprawdopodobniej nie zawiera samego obrazu JRE, więc będzie o wiele więcej.
Sprawdź i / lub zwiększ limit pamięci PHP (/etc/php.ini), coś w stylu:
W zależności od konfiguracji możesz to zrobić również w samym pliku .php:
W przypadku publikowania pliku /tmp/hs_err_pid14930.log błąd, do którego się odwołuje, byłby bardzo pomocny!
źródło
W przypadku, gdy ktoś inny szuka sposobu na rozwiązanie tego problemu bez wyraźnego wyłączenia SELinux, strona wiki w centos.org pomogła mi zrozumieć, co się dzieje.
Domyślnie kontekst bezpieczeństwa, w którym działa Java, gdy jest wywoływany z Apache, nie pozwala na takie rzeczy, jak czytanie pliku, przydzielanie pamięci, dostęp do sieci itp. Najłatwiejszym sposobem na rozwiązanie tych błędów jest użycie aplikacji semodułu i audit2allow. Zasadniczo sprawdź dziennik kontroli SELinux (może to być /var/logs/audit/audit.log, ale użyłem / var / log / messages i wyodrębniłem błędy avc). W dzienniku powinieneś zobaczyć takie rzeczy
i
W rzeczywistości zobaczysz sporo na temat wykonywania, przydzielania pamięci i wielu innych zasad, które naruszasz, ponieważ SELinux jest ustawiony na wymuszanie i zatrzymywanie działania aplikacji.
W dzienniku kontroli uruchom audit2allow jak poniżej:
Gdzie myapppolicy to nazwa zasady, którą chcesz utworzyć, która zezwoli na wszystkie rzeczy, które zostały odrzucone w dzienniku, a audit.log to nazwa pliku dziennika opisanego powyżej. Po uruchomieniu tego polecenia należy utworzyć dwa pliki. Pierwszy to myapppolicy.te, który jest tekstową reprezentacją zasad na podstawie dziennika kontroli. Możesz to otworzyć w edytorze tekstu i upewnić się, że Twoje zasady nie są zbyt szerokie. Drugi plik to plik myapppolicy.pp, który jest skompilowanym pakietem zasad, który można włączyć.
Uruchom następujące polecenie, aby aktywować pakiet zasad, a następnie ponów proces. Być może masz wiele prób, aby wszystko działało zgodnie z oczekiwaniami, ponieważ aplikacja Java może naruszać inne zasady po uzyskaniu dostępu do pierwszej. Kroki te wykonuję około pięć razy dla serii aplikacji Java, które uruchomiłem za pomocą skryptu za pośrednictwem php.
źródło