GNU/Linux >> Belajar Linux >  >> Linux

Linux – Batasi Penggunaan Memori Untuk Proses Linux Tunggal?

Saya menjalankan pdftoppm untuk mengonversi PDF yang disediakan pengguna menjadi gambar 300DPI. Ini berfungsi dengan baik, kecuali jika pengguna menyediakan PDF dengan ukuran halaman yang sangat besar. pdftoppm akan mengalokasikan cukup memori untuk menyimpan gambar 300DPI dengan ukuran tersebut di memori, yang untuk halaman persegi 100 inci adalah 100*300 * 100*300 * 4 byte per piksel =3,5 GB. Seorang pengguna jahat bisa saja memberi saya PDF berukuran besar yang konyol dan menyebabkan segala macam masalah.

Jadi yang ingin saya lakukan adalah membatasi penggunaan memori untuk proses anak yang akan saya jalankan – biarkan prosesnya mati jika mencoba mengalokasikan lebih dari, katakanlah, memori 500MB. Apakah itu mungkin?

Saya tidak berpikir ulimit dapat digunakan untuk ini, tetapi apakah ada satu proses yang setara?

Jawaban yang Diterima:

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

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

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 'menahan' 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 dengan batasan waktu atau CPU.

Cara kerja alat ini adalah dengan memeriksa beberapa kali per detik jika proses spawned belum melampaui batas yang ditetapkan. Ini berarti sebenarnya ada jendela kecil di mana suatu proses berpotensi menjadi kelebihan langganan sebelum pemberitahuan batas waktu dan menghentikan prosesnya.

Oleh karena itu, pendekatan yang lebih tepat kemungkinan akan melibatkan cgroups, tetapi itu jauh lebih terlibat dalam penyiapan, bahkan jika Anda menggunakan Docker atau runC, yang antara lain, menawarkan abstraksi yang lebih ramah pengguna seputar cgroups.


Linux
  1. Cara Membatasi Penggunaan CPU Suatu Proses Di Linux

  2. Linux – Penggunaan Memori Nyata?

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

  1. Periksa batas FD terbuka untuk proses tertentu di Linux

  2. Membatasi penggunaan memori proses/CPU di linux

  3. Cara memeriksa ukuran heap untuk suatu proses di Linux

  1. Batasi penggunaan memori untuk satu proses Linux

  2. Penggunaan memori puncak dari suatu proses

  3. Bagaimana cara membatasi penggunaan memori berdasarkan aplikasi di linux?