System Performance Tuning di Linux (sysctl & ulimit)

Linux menyediakan berbagai mekanisme untuk performance tuning sistem agar sesuai dengan kebutuhan aplikasi atau server.
Dua komponen penting adalah:

  • sysctl → mengatur parameter kernel runtime (network, memory, filesystem, dsb).
  • ulimit → membatasi resource per user/process (file descriptor, memory, CPU time, dll).

Dengan tuning yang tepat, sistem dapat bekerja lebih optimal, aman, dan stabil.


⚙️ sysctl: Kernel Runtime Parameters

🔹 Cara Kerja

  • sysctl mengatur parameter kernel di /proc/sys.
  • Perubahan bisa dilakukan sementara atau permanen.

🔹 Command Dasar

Cek semua parameter:

sysctl -a

Cek nilai parameter tertentu:

sysctl net.ipv4.ip_forward

Set nilai sementara (hingga reboot):

sudo sysctl -w net.ipv4.ip_forward=1

Set nilai permanen di /etc/sysctl.conf atau /etc/sysctl.d/*.conf:

net.ipv4.ip_forward = 1

🔹 Contoh Parameter Penting

  1. Networking
    
    # Maksimum koneksi yang bisa ditangani backlog
    net.core.somaxconn = 1024

Ephemeral port range

net.ipv4.ip_local_port_range = 1024 65535

TCP keepalive

net.ipv4.tcp_keepalive_time = 600


2. **Memory Management**
```bash
# Swappiness agar swap tidak terlalu sering digunakan
vm.swappiness = 10

# Cache pressure (kontrol pembersihan cache)
vm.vfs_cache_pressure = 50
  1. File System
    # Maksimum file handles sistem
    fs.file-max = 2097152

⚙️ ulimit: User Resource Limits

🔹 Cara Kerja

  • Mengatur batasan resource per user atau per proses.
  • Berguna untuk mencegah satu user/proses menghabiskan seluruh resource sistem.

🔹 Command Dasar

Cek semua limit user saat ini:

ulimit -a

Set nilai limit sementara:

ulimit -n 65535   # maksimum file descriptor
ulimit -u 4096    # maksimum jumlah proses

Set permanen di /etc/security/limits.conf atau /etc/security/limits.d/*.conf:

# Format: <user> <type> <item> <value>
webuser soft nofile 65535
webuser hard nofile 65535

Atau di systemd service unit (misalnya /etc/systemd/system/myapp.service):

[Service]
LimitNOFILE=65535
LimitNPROC=4096

Reload systemd:

sudo systemctl daemon-reexec

🚀 Best Practices & Rekomendasi

  1. Networking Tuning (untuk Web/App Server)

    net.core.somaxconn = 1024
    net.ipv4.tcp_max_syn_backlog = 4096
    net.ipv4.tcp_fin_timeout = 15
    net.ipv4.tcp_tw_reuse = 1
  2. Memory Tuning

    • Atur vm.swappiness=10 untuk server dengan RAM besar.
    • Atur vm.overcommit_memory=1 untuk aplikasi database.
    • Gunakan vm.vfs_cache_pressure=50 agar cache tidak terlalu cepat dibersihkan.
  3. File Descriptor & Process Limit

    • Untuk aplikasi high-concurrency (Nginx, Node.js, Database), set nofile ke 65535 atau lebih.
    • Batasi nproc agar user tidak bisa membuat proses tak terbatas.
  4. Keamanan

    • Jangan set ulimit -c unlimited kecuali diperlukan (core dump besar bisa memenuhi disk).
    • Gunakan nofile sesuai kebutuhan workload, jangan terlalu kecil.
  5. Operational Best Practice

    • Simpan custom config di /etc/sysctl.d/99-custom.conf agar mudah dikelola.
    • Gunakan monitoring (htop, vmstat, iostat, sar) untuk mengevaluasi efek tuning.
    • Lakukan benchmark sebelum dan sesudah tuning.
    • Dokumentasikan semua perubahan untuk audit dan troubleshooting.

📌 Kesimpulan

  • sysctl → tuning parameter kernel (network, memory, fs).
  • ulimit → resource limit per user/proses.
  • Dengan kombinasi keduanya, Linux dapat dioptimalkan untuk berbagai skenario (web server, database server, HPC).
  • Best practice: mulai dari rekomendasi umum, lalu tuning sesuai workload dan lakukan pengujian performa.