Bagaimana cara menetapkan batas memori untuk proses tertentu?

10

Saya mencoba mengeksekusi mpiexec -16 ...pada server RAM 384 GB, tetapi itu diinduksi OOM Killer dan dibatalkan.

Bagaimana saya bisa menetapkan batas memori untuk mpiexeceksekusi?

Saya tahu ulimit, tapi itu mungkin memengaruhi proses lain.

Terima kasih.

Benben
sumber

Jawaban:

9

Saya pikir ini bisa dilakukan dengan menggunakan cgroups:

Buat cgroup bernama mpigroup(atau nama apa pun yang Anda pilih) dengan batas memori (50GB, misalnya):

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

Kemudian, jika mpiexec sudah berjalan, bawa ke cgroup ini:

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

Atau jalankan mpiexecdalam cgroup ini:

cgexec -g memory,cpu:mpigroup mpiexec -16 ...
muru
sumber
Bukankah seharusnya memorypengontrol cukup cgcreate -g memory:mpigroup:?
heemayl
@ heemayl seharusnya. Saya baru saja mengangkat contoh ini langsung dari wiki
muru
Pengaturan disimpan di / sys / fs / cgroup / memory /, dan untuk bekerja sudo diperlukan bahkan jika itu tidak gagal saat tidak menggunakan sudo
Aquarius Power
Saya berhasil membatasi memori fisik menjadi 2GB, bekerja dengan sempurna, tetapi memori virtualnya masih menjadi 8GB, tapi itu benar-benar baik karena permainan anggur hanya akan menggunakan swap daripada mengirim semua aplikasi linux lainnya untuk bertukar, dan itu membuat seluruh sistem bekerja lebih baik! Terima kasih!
Aquarius Power