Masalah seperti “Too many open files” pada proses atau service yang aktif sering kali menjadi kendala serius di lingkungan produksi, terutama pada server dengan beban kerja tinggi atau jumlah koneksi yang besar.
Dalam kondisi tersebut, Anda dapat meningkatkan resource limit (misalnya open_files_limit) pada proses yang sedang berjalan tanpa perlu melakukan restart server.
Using prlimit
#
prlimit adalah tool di Linux untuk menampilkan dan mengatur limit resource pada proses yang sudah berjalan.
Menampilkan semua limit resource pada suatu proses
prlimit --pid 13134
Mengatur batas open files (soft dan hard limit)
prlimit --pid 13134 --nofile=1024:4095
Keterangan:
1024→ soft limit4095→ hard limit
Using systemd-run
#
systemd-run memungkinkan kita menetapkan limit resource saat menjalankan proses baru.
Membatasi penggunaan RAM hingga 1GB
systemd-run --scope -p MemoryLimit=1G ./myProcess.sh
Membatasi penggunaan CPU hingga 50%
systemd-run --scope -p CPUQuota=50% ./myProcess.sh
Using cpulimit
#
cpulimit digunakan untuk membatasi penggunaan CPU pada proses baru maupun proses yang sudah berjalan.
Membatasi proses Firefox hingga 20% CPU
cpulimit -l 20 firefox
Untuk membatasi proses yang sudah berjalan berdasarkan PID, gunakan:
cpulimit -p <PID> -l 20
Using ionice
#
ionice digunakan untuk mengatur prioritas akses disk I/O suatu proses.
Tool ini bekerja dengan menetapkan kelas prioritas I/O pada proses sehingga dapat mengontrol seberapa agresif proses tersebut menggunakan disk.
Kelas 3 (idle)
Proses hanya menggunakan disk I/O jika tidak ada permintaan I/O lain yang lebih prioritas.
ionice --class 3 ./myProcess.sh
Kelas 1 (realtime)
Prioritas tertinggi. Gunakan dengan sangat hati-hati karena dapat mengganggu proses lain di sistem.
ionice --class 1 ./myProcess.sh
Informasi kelas ionice:
0→ none (mengikuti scheduler default)1→ realtime (prioritas tertinggi)2→ best-effort (default untuk sebagian besar proses)3→ idle (hanya berjalan jika disk tidak sibuk)
Modify /etc/security/limits.conf
#
Untuk membuat limit resource menjadi permanen, Anda dapat mengaturnya melalui file:
/etc/security/limits.conf
Perubahan pada file ini biasanya memerlukan:
- Re-login user
- Restart service
- Atau restart server (jika diperlukan)
Contoh konfigurasi:
* soft core 0
* hard core 0
* soft data unlimited
* hard data unlimited
* soft nice 0
* hard nice 0
* soft fsize unlimited
* hard fsize unlimited
* soft sigpending 62793
* hard sigpending 62793
* soft memlock 64
* hard memlock 64
* soft rss unlimited
* hard rss unlimited
* soft nofile 500000
* hard nofile 500000
* soft msgqueue 819200
* hard msgqueue 819200
* soft rtprio 0
* hard rtprio 0
* soft stack 10240
* hard stack 10240
* soft cpu unlimited
* hard cpu unlimited
* soft nproc unlimited
* hard nproc unlimited
* soft as unlimited
* hard as unlimited
* soft locks unlimited
* hard locks unlimited
root soft nofile 500000
root hard nofile 500000
root soft nproc unlimited
root hard nproc unlimited