GNU/Linux >> Belajar Linux >  >> Linux

Batasi penggunaan memori untuk satu proses Linux

Cara lain untuk membatasi ini adalah dengan menggunakan grup kontrol Linux. Ini sangat berguna jika Anda ingin membatasi alokasi memori fisik proses (atau kelompok proses) secara jelas dari memori virtual. Misalnya:

cgcreate -g memory:myGroup
echo 500M > /sys/fs/cgroup/memory/myGroup/memory.limit_in_bytes
echo 5G > /sys/fs/cgroup/memory/myGroup/memory.memsw.limit_in_bytes

akan membuat grup kontrol bernama myGroup , tutup kumpulan proses yang dijalankan di bawah myGroup hingga 500 MB memori fisik dengan memory.limit_in_bytes dan hingga 5000 MB memori fisik dan swap bersama dengan memory.memsw.limit_in_bytes . Info selengkapnya tentang opsi ini dapat ditemukan di sini:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/resource_management_guide/sec-memory

Untuk menjalankan proses di bawah grup kontrol:

cgexec -g memory:myGroup pdftoppm

Perhatikan bahwa pada distribusi Ubuntu modern, contoh ini memerlukan pemasangan cgroup-bin paket dan pengeditan /etc/default/grub untuk mengubah GRUB_CMDLINE_LINUX_DEFAULT ke:

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"

dan kemudian menjalankan sudo update-grub dan mem-boot ulang untuk mem-boot dengan parameter boot kernel yang baru.


Jika proses Anda tidak menelurkan lebih banyak anak yang menggunakan memori paling banyak, Anda dapat menggunakan setrlimit fungsi. Antarmuka pengguna yang lebih umum untuk itu menggunakan ulimit perintah dari shell:

$ ulimit -Sv 500000     # Set ~500 mb limit
$ pdftoppm ...

Ini hanya akan membatasi memori "virtual" dari proses Anda, dengan mempertimbangkan—dan membatasi—memori yang dibagikan oleh proses yang dipanggil dengan proses lain, dan memori yang dipetakan tetapi tidak dicadangkan (misalnya, tumpukan besar Java). Namun, memori virtual adalah perkiraan terdekat untuk proses yang tumbuh sangat besar, membuat kesalahan tersebut menjadi tidak signifikan.

Jika program Anda memunculkan anak-anak, dan merekalah yang mengalokasikan memori, itu menjadi lebih kompleks, dan Anda harus menulis skrip tambahan untuk menjalankan proses di bawah kendali Anda. Saya menulis di blog saya, mengapa dan bagaimana.


Ada beberapa masalah dengan ulimit. Berikut bacaan bermanfaat tentang topik ini:Membatasi konsumsi waktu dan memori suatu program di Linux, yang mengarah ke alat batas waktu, yang memungkinkan Anda mengurung proses (dan percabangannya) berdasarkan waktu atau konsumsi memori.

Alat batas waktu membutuhkan Perl 5+ dan /proc sistem file terpasang. Setelah itu Anda menyalin alat tersebut ke mis. /usr/local/bin seperti itu:

curl https://raw.githubusercontent.com/pshved/timeout/master/timeout | \
  sudo tee /usr/local/bin/timeout && sudo chmod 755 /usr/local/bin/timeout

Setelah itu, Anda dapat 'mengkurung' proses Anda dengan konsumsi memori seperti pada pertanyaan Anda seperti ini:

timeout -m 500 pdftoppm Sample.pdf

Atau Anda bisa menggunakan -t <seconds> dan -x <hertz> untuk masing-masing membatasi proses berdasarkan waktu atau batasan CPU.

Cara kerja alat ini adalah dengan memeriksa beberapa kali per detik jika proses yang dihasilkan belum melewati batasan yang ditetapkan. Ini berarti sebenarnya ada jendela kecil di mana proses berpotensi menjadi oversubscribe sebelum batas waktu pemberitahuan dan menghentikan proses.

Oleh karena itu, pendekatan yang lebih tepat kemungkinan akan melibatkan cgroup, tetapi itu jauh lebih rumit untuk disiapkan, bahkan jika Anda menggunakan Docker atau runC, yang antara lain, menawarkan abstraksi yang lebih ramah pengguna seputar cgroup.


Linux
  1. Cara Memeriksa Penggunaan Memori Proses dengan Perintah pmap Linux

  2. Linux – Batasi Penggunaan Memori Untuk Proses Linux Tunggal?

  3. Ambil penggunaan CPU dan penggunaan memori dari satu proses di Linux?

  1. Penggunaan Memori Linux

  2. Periksa batas FD terbuka untuk proses tertentu di Linux

  3. Bagaimana penggunaan memori dilaporkan di Linux?

  1. Cara Membatasi Penggunaan CPU Suatu Proses Di Linux

  2. Linux – Penggunaan Memori Nyata?

  3. Penggunaan memori puncak dari proses linux/unix