JVM cant carte mémoire réservée lors de l'exécution dans des conteneurs Docker
Je ne peux pas semblent fonctionner java dans un conteneur Docker sur mon serveur. Même lors de l'émission java -version
, j'obtiens l'erreur suivante.
root@86088d679103:/# java -version
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000035ce1000000, 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:
# //hs_err_pid17.log
Selon ce, java ne pouvez pas mapper 2,5 Mo d'espace de mémoire réservée? Cela ne semble pas juste...
J'ai le log complet inclus à la fin, mais pour le bien de quelques informations supplémentaires, mon système de reporting suivantes:
root@86088d679103:/# uname -m
x86_64
root@86088d679103:/# free -mh
total used free shared buffers cached
Mem: 15G 9.7G 5.8G 912K 148M 8.9G
-/+ buffers/cache: 639M 14G
Swap: 15G 0B 15G
Quelqu'un peut me pointer dans la bonne direction?
Log Complet: https://gist.github.com/KayoticSully/e206c44681ce261674ba
Mise à jour
@Yobert cloué le problème et je vous suggère fortement de lire à travers les commentaires et des log de chat. Bonne info.
Pour ceux qui veulent la dernière commande que fait Java de travail: setfattr -n user.pax.flags -v "mr" /usr/bin/java
Si votre distribution n'a pas setfattr
installé par défaut, il devrait être inclus dans le paquet installable attr par paceman, apt-get, etc.
OriginalL'auteur KayoticSully | 2014-12-03
Vous devez vous connecter pour publier un commentaire.
J'ai eu ce même problème lors de l'utilisation d'un Grsec noyau d'activé. Pour java pour jouer à nice, j'ai dû désactiver MPROTECT sur le binaire java. Vous pouvez utiliser le
paxctl
utilitaire pour cette:Vous aurez besoin de faire
paxctl -c
sur le binaire d'abord si vous n'avez jamais utilisé sur que le binaire avant:Plus d'informations sur paxctl peut être trouvé à: http://en.wikibooks.org/wiki/Grsecurity/Additional_Utilities
Découvrez dmesg-- vous devriez voir quelques trucs quand vous essayez de l'exécuter si c'est un PAX problème. Il y a également une nouvelle manière de mettre les attributs de sécurité via xattrs au lieu de l'en-tête binaire, si votre noyau prend en charge. Vous avez peut-être l'héritage le mode désactivé?
Hmm je vais essayer d'enlever plus de drapeaux que de simplement m ainsi. Nous enlevons pemrs pour java (même si je ne pense pas que c'est idiomatiques)
Bon alors... je suis présent dans le dmesg il ressemble.
[24753.007799] grsec: From 10.0.0.106: denied RWX mmap of <anonymous mapping> by /usr/lib/jvm/java-8-jre/jre/bin/java[java:19815] uid/euid:1000/1000 gid/egid:1000/1000, parent /usr/bin/bash[bash:14286] uid/euid:1000/1000 gid/egid:1000/1000
dois-je faire cela sur le coup de trop? Et c'est après que j'ai désactivé tous les drapeaux sur javaLa Java bin tout ce qu'il faut. Peut-être il ya une autre binaire dans le conteneur docker c'est à l'aide?
OriginalL'auteur Yobert
J'ai eu le même problème lors de l'exécution de Docker sur Alpine Linux, après l'activation de la PaX mode soft, il a travaillé:
Douce de mode de désactiver la plupart des PaX de fonctionnalités par défaut, il n'est donc pas recommandé de l'activer. La bonne façon est d'utiliser paxctl, comme déjà mentionné ci-dessus.
Aussi jeter un oeil ici:
https://en.wikibooks.org/wiki/Grsecurity/Appendix/Grsecurity_and_PaX_Configuration_Options#Support_soft_mode
Merci. Cela a fonctionné pour moi sur 3.7.0 standard et virtuel.
OriginalL'auteur Sven Mohr
Cela m'est arrivé aussi ,
Nous avons réduit la taille de la RAM sur notre VM, et après une couple de jours commencé à avoir cette erreur et de service n'est pas venu jusqu'à jamais.
Solution :: Nous avons réduit la taille du segment de mémoire de l'application ou du service ayant ce problème et le service est venu bien à nouveau.
OriginalL'auteur Ankit