Saya memiliki dua server CentOS 5 dengan spesifikasi yang hampir sama. Ketika saya masuk dan melakukannya ulimit -u
, di satu mesin saya dapatkan unlimited
, dan di lain saya dapatkan 77824
.
Ketika saya menjalankan cron seperti:
* * * * * ulimit -u > ulimit.txt
Saya mendapatkan hasil yang sama ( unlimited
, 77824
).
Saya mencoba menentukan di mana ini diatur sehingga saya bisa mengubahnya. Mereka tidak diatur dalam profil saya ( .bashrc
, /etc/profile
, dll). Ini tidak akan memengaruhi cron) maupun dalam /etc/security/limits.conf
(yang kosong).
Saya telah menjelajahi google dan bahkan melakukan lebih jauh grep -Ir 77824 /
, tetapi tidak ada yang muncul sejauh ini. Saya tidak mengerti bagaimana mesin ini bisa diatur dengan batas yang berbeda.
Saya sebenarnya bertanya-tanya bukan untuk mesin ini, tetapi untuk mesin (CentOS 6) yang berbeda yang memiliki batas 1024
, yang terlalu kecil. Saya perlu menjalankan pekerjaan cron dengan batas yang lebih tinggi dan satu-satunya cara saya tahu cara mengaturnya adalah dalam pekerjaan cron itu sendiri. Tidak apa-apa, tapi saya lebih suka mengatur sistem itu lebar-lebar sehingga tidak seadanya.
Terima kasih atas bantuannya. Ini sepertinya mudah (BUKAN).
EDIT - ASK
Ok, saya sudah tahu ini. Tampaknya menjadi masalah dengan CentOS 6 atau mungkin konfigurasi mesin saya. Pada konfigurasi CentOS 5, saya dapat mengatur /etc/security/limits.conf
:
* - nproc unlimited
dan itu akan secara efektif memperbarui batas akun dan cron. Namun, ini tidak berfungsi di kotak CentOS 6 saya. Sebaliknya, saya harus melakukan:
myname1 - nproc unlimited
myname2 - nproc unlimited
...
Dan semuanya berjalan seperti yang diharapkan. Mungkin spesifikasi UID berfungsi, tetapi wildcard (*) pasti TIDAK di sini. Anehnya, wildcard berfungsi dengan baik nofile
.
Saya masih ingin tahu dari mana nilai-nilai default sebenarnya berasal, karena secara default, file ini kosong dan saya tidak bisa melihat mengapa saya memiliki standar yang berbeda untuk dua kotak CentOS, yang memiliki perangkat keras yang sama dan berasal dari penyedia yang sama .
/etc/security/limits.d/
?Jawaban:
Batas "default" ini diterapkan oleh:
init
proses),fork(2)
saat itu),setrlimit(2)
).Proses pengguna normal tidak dapat melampaui batas yang sulit.
Kernel Linux
Pada saat boot, Linux menetapkan batas default untuk
init
proses, yang kemudian diwarisi oleh semua proses (anak-anak) lainnya. Untuk melihat batas-batas ini:cat /proc/1/limits
.Sebagai contoh, default kernel untuk jumlah maksimum deskriptor file (
ulimit -n
) adalah 1024/1024 (lunak, keras), dan telah dinaikkan menjadi 1024/4096 di Linux 2.6.39.Jumlah maksimum proses default yang Anda bicarakan terbatas pada kira - kira:
untuk x86 arsitektur (setidaknya), tetapi distribusi kadang-kadang mengubah nilai default kernel, jadi memeriksa kode sumber kernel Anda untuk
kernel/fork.c
,fork_init()
. Batas "jumlah proses" disebut RLIMIT_NPROC di sana.PAM
Biasanya, untuk memastikan otentikasi pengguna saat masuk, PAM digunakan bersama dengan beberapa modul (lihat
/etc/pam.d/login
).Pada Debian, modul PAM bertanggung jawab untuk menetapkan batas di sini:
/lib/security/pam_limits.so
.Pustaka ini akan membaca konfigurasinya dari
/etc/security/limits.conf
dan/etc/security/limits.d/*.conf
, tetapi bahkan jika file-file itu kosong, pam_limits.so mungkin menggunakan nilai - nilai hardcoded yang dapat Anda periksa dalam kode sumber.Misalnya, pada Debian, pustaka telah ditambal sehingga secara default, jumlah maksimum proses (
nproc
) tidak terbatas, dan jumlah maksimum file (nofile
) adalah 1024/1024:Jadi, periksa kode sumber modul PAM CentOS Anda (cari RLIMIT_NPROC).
Namun, harap dicatat bahwa banyak proses tidak akan melalui PAM (biasanya, jika tidak diluncurkan oleh pengguna yang masuk, seperti daemon dan mungkin pekerjaan cron).
sumber
/etc/initscript
- "tempat yang nyaman untuk menyesuaikan per batas proses", dapat dikonfigurasi melalui/etc/sysconfig/ulimit
./proc/1/limits
) sejak versi 1.1.4 (dirilis 2011).Pada RHEL6 (CentOS6) "proses pengguna maks" diatur ke 1024 secara default.
Anda dapat mengubah nilai ini dalam file:
Lihat https://bugzilla.redhat.com/show_bug.cgi?id=432903 jika Anda ingin mengeluh tentang hal itu :)
sumber
Ketika Anda memeriksa batasan, apakah Anda menggunakan root untuk melakukannya?
Dari halaman
limits.conf
manual:Menggunakan nama pengguna eksplisit akan menyelesaikan masalah dalam kasus ini.
sumber
limits.conf
file tersebut kosong (sebagailimits.d
direktori).Info tentang ini sangat buruk di internet, ini file files.conf yang saya buat untuk debian linux, menunjukkan semua opsi yang mungkin dan batas maksimum "aman" mereka, atur sesuai kebutuhan.
Ini adalah nilai tertinggi yang dapat Anda tetapkan, beberapa hal di-hash, mengaktifkan hal itu menyebabkan Anda melakukan kesalahan dan tidak dapat masuk ke konsol Anda, mengubah opsi yang dikomentari dengan risiko Anda sendiri, tetapi Anda tidak perlu (defaultnya tidak terbatas) kebanyakan)
Saya harap ini bermanfaat bagi seseorang, karena saya tidak dapat menemukan info ini di mana pun, ada 4 jam penelitian pada file ini.
sumber
kernel / fork.c
Pada 64 bit, ukuran Thread adalah 8192
Sekarang saya mendapatkan total dalam kb di divisi oleh 4
Sekarang saya mendapat jumlah halaman
Hasil akhirnya adalah
Dengan cara ini Anda mendapatkan parameter thread-max dan batas proses pengguna default adalah setengah
ulimit dari root
sumber
Tampaknya /etc/security/limits.conf
http://ss64.com/bash/limits.conf.html
sumber
Ada satu kemungkinan lagi bahwa konfigurasi untuk "noproc" tidak berfungsi saat mengkonfigurasi di /etc/security/limits.conf.
Ada satu file lagi yang menimpa konfigurasi /etc/security/limits.d/90-nproc.conf Anda.
Di sini * config akan menimpa apa pun yang Anda atur di file konfigurasi sebelumnya. Jadi idealnya Anda mengkonfigurasi pengaturan Anda di file ini.
sumber