Tengo Arch Linux con el último kernel de Linux 4.9.x reforzado con grsec con paxd instalado. Pero debido a esto, cuando intento ejecutar Java, aparece el siguiente error:
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000035ea1000000, 2555904, 1) failed; error='Operation not permitted' (errno=1)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 2555904 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/[username]/hs_err_pid2813.log
Ahora, recibí este error en el pasado y logré decirle que permitiera que Java hiciera esto, sin embargo, no puedo recordar ni encontrar los recursos sobre cómo hacerlo. he miradoesta respuesta SO, pero, por desgracia, mi sistema me dice que no puede encontrar el comando paxctl
a pesar de que tengo instaladas todas las utilidades relacionadas con grsec mencionadas en la wiki de Arch.
Entonces, ¿cómo hago para que permita Java?
Respuesta1
paxctl
debería funcionar para ti,
root #paxctl -h
PaX control v0.7
Copyright 2004,2005,2006,2007,2009,2010,2011,2012 PaX Team <[email protected]>
usage: paxctl <options> <files>
options:
-p: disable PAGEEXEC -P: enable PAGEEXEC
-e: disable EMUTRAMP -E: enable EMUTRAMP
-m: disable MPROTECT -M: enable MPROTECT
-r: disable RANDMMAP -R: enable RANDMMAP
-x: disable RANDEXEC -X: enable RANDEXEC
-s: disable SEGMEXEC -S: enable SEGMEXEC
-v: view flags -z: restore default flags
-q: suppress error messages -Q: report flags in short format
-c: convert PT_GNU_STACK into PT_PAX_FLAGS (see manpage!)
-C: create PT_PAX_FLAGS (see manpage!)
Normalmente desactivaría todas las restricciones como esta,
paxctl -pemrxs `which java`
Aunque también puedes configurar las banderas de forma más directa sin necesidad paxctl
. Entonces, por ejemplo, si quisieras deshabilitar los mr
que harías:
sudo setfattr -n user.pax.flags -v "mr" `which java`