2011-01-10 2 views
8

J'ai parcouru internet pour trouver la quantité de mémoire qu'un processus Java peut prendre sur une machine Linux (Red Hat). (Je ne parle pas de tas, mais de toute la quantité de mémoire occupée par le Java Processus)Comment déterminer la limite de mémoire de processus sous Linux?

Je n'ai pas la permission d'exécuter quoi que ce soit sur cette machine. Donc, je ne peux pas simplement exécuter un programme qui consomme de la mémoire jusqu'à la condition Out-Of-Memory.

Cependant, j'ai la permission de vérifier les fichiers de configuration, etc. (par exemple: J'ai essayé d'exécuter cat/proc/meminfo, mais je ne comprends pas, il semble qu'aucun de ses résultats ne représente le paramètre Je veux savoir à propos de).

J'ai essayé un programme java sur une machine à chapeau rouge séparée - sur laquelle j'ai la permission d'exécuter des programmes - et j'ai pu voir le programme java atteindre environ 3 Go.

Y a-t-il un moyen de déterminer la quantité de mémoire qu'un processus peut obtenir?

Répondre

8

ulimit est votre ami. Les processus Java ne sont pas différents des autres. Mais si vous ne pouvez même pas lancer ulimit -a, il est difficile de répondre à votre question.

+0

J'ai exécuté "ulimit -a" mais ce que j'ai obtenu était sorti avec un tas d'options à essayer. J'ai donc essayé "ulimit -m", le résultat obtenu était "non limité". Je ne sais pas ce que cela signifie, mais je ne pense pas que cela signifie qu'un processus peut prendre une mémoire illimitée ... n'est-ce pas? – rk2010

+2

@ rk2010 signifie qu'il n'y a pas de quota sur l'utilisation de la mémoire par un processus, la seule limite dure est la quantité de RAM et de mémoire de l'ordinateur. –

+0

@Matias mais il semble y avoir tellement d'informations (vagues) sur Internet indiquant qu'un certain processus ne peut pas consommer plus de 3 Go de mémoire. Quelle est votre opinion à ce sujet? – rk2010

2

J'ai eu affaire à ce problème exact et j'ai trouvé la meilleure solution si vous utilisez 2.6.24 ou plus est d'utiliser cgroup/cgroups. Un exemple serait comme ceci, voici le fichier /etc/cgconfig.conf par défaut avec un groupe de contrôle ajouté en bas. Ce groupe de contrôle limite l'allocation de mémoire physique à 100 Mo et l'allocation de mémoire virtuelle totale à 200 Mo.

mount { 
    cpuset = /cgroup/cpuset; 
    cpu = /cgroup/cpu; 
    cpuacct = /cgroup/cpuacct; 
    memory = /cgroup/memory; 
    devices = /cgroup/devices; 
    freezer = /cgroup/freezer; 
    net_cls = /cgroup/net_cls; 
    blkio = /cgroup/blkio; 
} 

group daemons/java_limited_process { 
    memory { 
     memory.limit_in_bytes = "104857600"; 
     memory.memsw.limit_in_bytes = "209715200"; 
    } 
} 

Une fois que je l'ai configuré ce, je peux ajouter au processus groupe comme si

cgexec -g memory:daemons/java_limited_process /usr/local/tomcat/bin/startup.sh 

Cela limitera la mémoire du processus principal et les enfants qu'il engendre. Il dispose également d'installations pour interroger l'utilisation de la mémoire dans les contrôleurs.

Questions connexes