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.

Benben
la source

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 ...
muru
la source
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