12
votes

Comment déterminer la limite de mémoire de processus de Linux?

J'ai fouillé Internet pour savoir la quantité de mémoire qu'un processus Java peut prendre sur une machine Linux (chapeau rouge). (Je ne parle pas de tas; plutôt, la totalité de la mémoire reprise par le processus Java )

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 de mémoire hors mémoire.

Cependant, je dispose de vérifier les fichiers de configuration, etc. (par exemple: j'ai essayé d'exécuter Cat / Proc / Meminfo, mais je ne peux pas le comprendre; il semble que aucun de ses résultats ne représente le paramètre i vouloir savoir).

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

Y a-t-il une manière que je puisse savoir combien de mémoire un processus peut obtenir?


0 commentaires

3 Réponses :


13
votes

Ulimit est votre ami. Les processus Java ne sont pas différents de ceux d'autres. Mais si vous ne pouvez même pas courir Ulimit -a, il est difficile de répondre à votre question.


6 commentaires

J'ai exécuté "ulimit -a" mais ce que j'ai eu était de produire avec un tas d'options à essayer. J'ai donc essayé "ulimit -m", le résultat que j'ai eu était "unimité". 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 ..


@ RK2010 signifie qu'il n'y a pas de quota sur l'utilisation de la mémoire par aucun processus, la seule limite dure correspond à la quantité de RAM et de mémoire échangez l'ordinateur.


@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 de cela?


@ RK2010 qui dépend de tout le système d'exploitation 64 bits ou 32 bits, pour le système d'exploitation 32 bits que vous ne pouvez aborder qu'à 3,5 Go de mémoire par processus. Quoi qu'il en soit, si vous avez plus de mémoire que cela, un système d'exploitation 64 bits est "requis".


La mémoire totale qu'un processus de 32 bits peut être illimité (taille de tous les stockages sur la machine (disques durs, RAM, etc.), ce qui est utilisé d'autres personnes. Mais le maximum pouvant être mappé (accessible en mémoire adressable directe) à Tout le temps est de 4 Go- (2 Power N), n est souvent 30, donnant 4GB-1GB = 3GB. N de 29 vous donnera 3,5 Go. Je ne me souviens pas de savoir comment changer n.


Il convient de noter que la commande ulimit est intégrée aux / bin / sh et / bin / bash coquilles. Si vous reprochez votre processus directement (sans utiliser de coquille), cette commande n'existe pas.



6
votes

Voici une lecture utile: Consommation de temps et de mémoire d'un programme de Linux , qui mène au Timeout Outil, ce qui permet vous cage un processus (et ses fourchettes) par la consommation de temps ou de mémoire.


0 commentaires

1
votes

J'ai géré 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 celui-ci, voici le fichier /etc/cgconfig.conf par défaut avec un groupe de contrôle ajouté en bas. Ce groupe de contrôle limite les amout de mémoire physique à 100 Mo et l'allocation de mémoire virtuelle totale à 200 Mo.

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


0 commentaires