Comment définir une limite de mémoire pour un processus spécifique?


10

J'ai essayé d'exécuter mpiexec -16 ...sur un serveur RAM de 384 Go, mais cela a provoqué OOM Killer et a été abandonné.

Comment puis-je définir une limite de mémoire pour l' mpiexecexécution?

Je sais ulimit, mais cela pourrait affecter d'autres processus.

Je vous remercie.

Réponses:


9

Je pense que cela peut être fait en utilisant cgroups:

Créez un groupe de contrôle nommé mpigroup(ou quel que soit le nom que vous choisissez) avec une limite de mémoire (de 50 Go, par exemple):

cgcreate -g memory,cpu:mpigroup
cgset -r memory.limit_in_bytes=$((50*1024*1024*1024)) mpigroup

Ensuite, si mpiexec est déjà en cours d'exécution, placez-le dans ce groupe de contrôle:

cgclassify -g memory,cpu:mpigroup $(pidof mpiexec)

Ou exécutez mpiexecdans ce groupe de contrôle:

cgexec -g memory,cpu:mpigroup mpiexec -16 ...

Le memorycontrôleur ne devrait-il pas suffire cgcreate -g memory:mpigroup:?
heemayl

@heemayl devrait l'être. Je viens de retirer cet exemple directement du wiki
muru

les paramètres sont stockés dans / sys / fs / cgroup / memory /, et pour fonctionner sudo est requis même s'il n'échoue pas sans utiliser sudo
Aquarius Power

J'ai réussi à limiter la mémoire physique à 2 Go, fonctionnait parfaitement, mais la mémoire virtuelle allait toujours à 8 Go, mais c'était tout à fait correct parce que le jeu de vin utiliserait simplement l'échange au lieu d'envoyer toutes les autres applications Linux à échanger, et cela a fait l'ensemble du système fonctionne mieux! THX!
Aquarius Power
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.