Penjelasan Linux /etc/security/limits.conf

9

Adakah yang bisa menjelaskan (atau mengetahui sumber) yang memberikan detail tentang item dalam limit.conf? Halaman manual tidak memberikan banyak detail.

Misalnya dikatakan:

rtprio 
maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) 

priority 
the priority to run user process with (negative values boost process priority) 

Apa bedanya? Nilai apa yang bisa mereka ambil? Untuk apa mereka default?

Beberapa item sudah jelas, tetapi di mana saya dapat menemukan penjelasan yang lebih baik (nilai default, rentang, apa arti sebenarnya, dll) dari:

data 
maximum data size (KB) 

fsize 
maximum filesize (KB) 

memlock 
maximum locked-in-memory address space (KB) 

cpu 
maximum CPU time (minutes) 

nice 
maximum nice priority allowed to raise to (Linux 2.6.12 and higher) values: [-20,19] 

Apa yang terjadi ketika CPU terlampaui? Prosesnya terbunuh? Hanya satu proses atau seluruh pengguna dilarang menggunakan CPU? Apakah ini untuk satu sesi atau untuk waktu maksimum dalam setiap menit?

Saya mencoba mencari jawaban tetapi yang bisa saya temukan hanyalah halaman manual yang memberikan hampir tidak ada detail sama sekali.

myforwik
sumber
Rute ini merupakan pengantar yang sangat baik untuk Administrasi Linux - meskipun tidak memberikan banyak detail tentang limit.conf, ia memberi tahu Anda di mana menemukan info ini - rute.2038bug.com/index.html.gz
symcbean

Jawaban:

18
rtprio 
maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) 

priority 
the priority to run user process with (negative values boost process priority) 

Mengapa ini berbeda?

Ada beberapa kelas penjadwal proses di linux. Default (CFQ) pada dasarnya memberikan jumlah irisan waktu yang sama untuk setiap proses yang ingin dijalankan dan mengantre tugas yang bisa dijalankan sedemikian rupa sehingga setiap orang menunggu rata-rata jumlah waktu yang sama untuk giliran mereka. Beberapa pengecualian untuk aturan ini ada tetapi itulah ide dasarnya.

Kelas penjadwal lain adalah penjadwal waktu nyata. Realtime sedikit berbeda, tugas antrian runnable agak ke dalam skema antrian yang adil, proses realtime akan mendapatkan waktu CPU segera setelah diperlukan oleh proses, ini mengusir proses yang berjalan dari CPU untuk memberikan ruang bagi 'realtime 'proses.

Nilai apa yang bisa mereka ambil?

Apa yang 'prioritas' lakukan adalah mengubah kesenangan proses sehingga saat login proses utama Anda dimulai pada kesenangan tertentu, setiap proses anak yang Anda hasilkan juga memulai pada kesenangan yang sama.

Ini memiliki efek membuatnya lebih mungkin dijadwalkan dalam mendukung proses bersaing lainnya dan pengalaman pengguna dapat dibuat menjadi lebih responsif / interaktif untuk nilai-nilai kebaikan yang lebih rendah dan kurang responsif / interaktif jika kebaikan ditingkatkan.

Mungkin penting bagi pengguna login normal untuk memiliki prioritas lebih rendah daripada daemon yang dapat diservis misalnya, atau root untuk memiliki prioritas lebih tinggi pada login daripada yang lainnya.

Sedangkan untuk realtime, pertikaian ditangani dengan bidang 'rtprio'. Jika Anda memiliki dua tugas waktu nyata yang keduanya ingin dijalankan maka nilai 'rtprio' digunakan untuk menentukan proses mana yang akan dipilih untuk prioritas terlebih dahulu. Rtprio yang lebih tinggi menghasilkan tugas dengan prioritas lebih tinggi.

Menetapkan ini dalam batas.conf memungkinkan tugas-tugas realtime ditetapkan pada penargetan prioritas tertentu tanpa perlu root untuk menetapkan nilainya. Ini tidak berpengaruh pada tugas yang tidak diatur untuk dijalankan menggunakan penjadwal waktu nyata.

Nilai 'bagus' harus melakukan hal yang sama dengan 'rtprio' tetapi untuk penjadwalan CFQ standar. Saya belum pernah mencobanya. Ini mengatur proses awal yang muncul ketika PAM menetapkan batas-batas ini untuk vaule yang bagus, pengguna normal kemudian dapat pergi ke tingkat yang bagus atau lebih tinggi tanpa perlu root untuk mengaturnya. Jika Anda tidak mengganti nama secara eksplisit itu berarti semua proses yang dihasilkan dari shell dari login itu (misalnya) akan mewarisi nilai bagus yang ditetapkan dalam batas.conf membentuk proses induk yang awalnya dibuat.

Apa standarnya?

Batas 'default' - secara teknis semuanya diatur ke apa pid 1 kecuali ditetapkan secara eksplisit, batas sumber daya diwarisi dari proses induk, jika tidak ada batas yang telah ditentukan atau diganti di mana pun maka warisan dari initadalah default.

Nilai Lainnya

data 
maximum data size (KB) 

Ketika suatu proses diinisialisasi, ia mengalokasikan sejumlah memori yang dikenal sebagai 'segmen data' ketika proses tersebut disalin ke dalam memori, di sinilah ruang bagi para global, mungkin beberapa data dan memori yang diinisialisasi lainnya dialokasikan dari tumpukan heap. Batas mengontrol jumlah alokasi maksimum yang dapat diambil suatu proses.

Tidak mungkin Anda pernah mencapai batas ini karena malloc () jarang menggunakan terlalu banyak segmen data untuk menyimpan data.

fsize 
maximum filesize (KB) 

Ini benar-benar hanya menetapkan ukuran maksimum file yang dapat ditulis sebagai pengguna tersebut.

memlock 
maximum locked-in-memory address space (KB) 

Hampir semua memori yang diperoleh aplikasi 'tergusur'. Itu bisa ditukar. Memori terkunci Memori tidak pernah dapat ditukar dan tetap ada. Nilai ini dikontrol secara ketat karena dapat disalahgunakan oleh orang-orang untuk membuat sistem memori menjadi kelaparan dan menyebabkan pertukaran. Ini biasanya berguna dengan aplikasi keamanan (yang tidak pernah ingin halaman mereka ditukar - dan menjadi dapat dibaca dari partisi swap).

cpu 
maximum CPU time (minutes) 

Ini mewakili jumlah total waktu proses yang dapat dikonsumsi pada CPU. Suatu proses yang melebihi nilai ini terbunuh. Perhatikan ini BUKAN sama dengan jumlah waktu yang telah berlalu sejak proses dimulai. Yaitu batas cputime 1 menit akan memakan waktu 1 menit untuk dikonsumsi jika proses memiliki utilisasi CPU 100%, tetapi 2 menit untuk dikonsumsi jika proses menggunakan utilisasi 50%.

Apa yang terjadi jika cpu terlampaui?

Proses akan dikirim sinyal mematikan SIGXCPUyang menghentikan proses. Ini kemudian dapat ditangkap oleh proses induk dan ditangani di sana.

Hanya satu proses atau seluruh pengguna tidak menggunakan CPU?

Hampir semua batasan yang direferensikan ditangani berdasarkan per proses. Termasuk waktu CPU. Satu-satunya yang tidak saya yakini sebagai jumlah total login dan jumlah total proses oleh pengguna itu.

Beberapa gotch lainnya dengan batasan adalah:

  • Max proses mencakup jumlah utas ringan.
  • Batas RSS tidak melakukan apa pun dan belum selama beberapa tahun, tidak ada gunanya untuk menetapkan.
Matthew Ife
sumber
1

Ini untuk pam_limitsmodul ... itu setrlimit(2)dan sysctl(8)nilai - nilai. Pencarian saya tidak menemukan batasan keras, tetapi halaman manual yang dikutip memberikan beberapa penjelasan.

vonbrand
sumber
1

Jawaban cepat adalah jawaban yang bagus, jadi begini.

  • Temukan nilai minimum dan maksimum untuk prioritas dengan schedtool -r; dan
  • permintaan batas saat ini dengan ulimit -a.

Jangan lupa untuk menetapkan batas lunak dan keras, bahkan jika mereka memiliki nilai yang sama. Dalam tes saya, ini adalah satu-satunya hal yang akan menunjukkan perbedaan dalam perintah ulimit.

Semoga ini bisa membantu Anda.

drum
sumber