Belajar FreeBSD - Performance Tuning & Optimization
Episode 18 of 23

Belajar FreeBSD - Performance Tuning & Optimization

Mengoptimalkan performa FreeBSD: tuning kernel dengan sysctl dan loader.conf, monitoring dengan top, systat, vmstat, dan iostat, serta tuning storage ZFS dengan ARC cache dan recordsize. Kalian akan tahu parameter mana yang diubah dan kapan waktu yang tepat untuk mengubahnya.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 17 sebelumnya kalian sudah memahami FreeBSD 15 dan strategi upgrade. Sekarang kita masuk ke seni performance tuning — mengoptimalkan sistem agar memakai sumber daya yang ada seefisien mungkin.

Tuning bukan tentang mengubah semua parameter secara membabi buta. Tuning yang baik dimulai dari pengukuran — memahami di mana bottleneck berada — lalu mengubah parameter yang tepat, dan mengukur lagi. Episode ini memetakan alat ukur dan parameter yang paling sering disentuh, termasuk tuning storage ZFS.

Prinsip Dasar Tuning

Sebelum menyentuh parameter, ingat tiga prinsip:

  • Ukur dulu, ubah kemudian. Jangan mengubah sysctl tanpa data.
  • Ubah satu per satu. Perubahan paralel membuat evaluasi mustahil.
  • Persisten hanya setelah teruji. Parameter yang terbukti baik ditulis ke sysctl.conf.
Melihat semua parameter sysctl
sysctl -a | wc -l
sysctl kern.maxfiles

FreeBSD mengekspos ratusan parameter runtime. Memahami mana yang relevan adalah bagian dari keahlian.

Tuning dengan sysctl

Parameter Kernel dan Memory

Beberapa parameter yang sering diubah di kategori kern dan vm:

Parameter kernel dan memori
sysctl kern.maxfiles=100000
sysctl kern.maxfilesperproc=50000
sysctl vm.swap_idle_enabled=1

kern.maxfiles menaikkan batas file descriptor — penting untuk server dengan banyak koneksi. vm.swap_idle_enabled memperlambat pemindahan proses idle ke swap.

Tuning TCP

Stack TCP bisa disesuaikan untuk workload jaringan:

Parameter TCP
sysctl net.inet.tcp.sendbuf_max=16777216
sysctl net.inet.tcp.recvbuf_max=16777216
sysctl net.inet.tcp.mssdflt=1460

Parameter buffer menentukan seberapa banyak data yang bisa transit sebelum acknowledgement — bottleneck umum untuk transfer file besar dan banyak koneksi.

Info

Ubah parameter TCP hanya jika pengukuran menunjukkan masalah (misalnya throughput yang rendah pada koneksi berlatensi tinggi). Mengubah buffer tanpa data justru bisa memboroskan memori kernel.

Persisten dengan sysctl.conf

Parameter yang sudah teruji ditulis ke /etc/sysctl.conf agar bertahan saat reboot:

Membuat sysctl persisten
sysrc -f /etc/sysctl.conf kern.maxfiles=100000
sysrc -f /etc/sysctl.conf net.inet.tcp.sendbuf_max=16777216

Tuning dengan loader.conf

Parameter kernel yang perlu disetel sebelum boot (misalnya yang dipakai saat kernel memulai) dikonfigurasi di /boot/loader.conf:

Tuning di loader.conf
kern.maxfiles="100000"
kern.ipc.shmall="131072"

Warning

Parameter di loader.conf dipakai saat kernel boot — untuk menerapkannya, reboot diperlukan. Bedakan dengan sysctl yang bisa diubah saat runtime. Kebiasaan yang baik: uji dengan sysctl dulu, lalu pindahkan ke loader.conf atau sysctl.conf setelah terbukti.

Monitoring: Melihat Sistem Bekerja

top dan systat

top menampilkan proses dan penggunaan sumber daya secara real-time, sementara systat memberi statistik dengan tampilan berlayar penuh:

Monitoring dengan top dan systat
top -o cpu
systat -vmstat
systat -ifstat

top -o cpu mengurutkan berdasarkan penggunaan CPU, systat -vmstat menampilkan virtual memory, dan systat -ifstat menampilkan throughput interface.

vmstat dan iostat

Tool klasik untuk mengukur memori dan I/O:

Mengukur memori dan I/O
vmstat 1
iostat -w 1

vmstat menampilkan statistik memori, swap, dan CPU. iostat menampilkan throughput dan utilisasi disk per perangkat — penting untuk mendeteksi bottleneck storage.

Success

Rutinitas baseline: vmstat 1 untuk memori dan CPU, iostat -w 1 untuk disk, systat -ifstat untuk jaringan. Kumpulkan baseline sebelum tuning — tanpa baseline, kalian tidak bisa menilai apakah perubahan benar-benar membantu.

Tuning Storage ZFS

ARC: Cache Memori ZFS

ARC adalah cache ZFS di RAM. Secara default ARC memakai hingga setengah memori sistem. Untuk mesin dengan memori terbatas atau kebutuhan aplikasi besar, batasi:

Membatasi ARC cache
sysctl vfs.zfs.arc_max=2147483648

Nilai di atas membatasi ARC ke 2 GB. Tulis ke sysctl.conf agar persisten.

Warning

Mengurangi ARC terlalu drastis akan melukai performa baca berulang. Mulai dari batas konservatif dan pantau dengan zpool iostat dan arcstat untuk menemukan keseimbangan antara cache ZFS dan memori aplikasi.

recordsize: Ukuran Blok

recordsize mengontrol ukuran blok logis ZFS — memengaruhi performa sesuai pola I/O:

Mengatur recordsize
zfs set recordsize=16k tank/data/db
zfs set recordsize=1M tank/data/media

Database dengan akses kecil acak (misalnya PostgreSQL) cocok dengan 16k atau 8k. Data media streaming besar cocok dengan blok besar seperti 1M — verifikasi dengan zfs get recordsize.

Compression dan Dedup

Compression lz4 dan zstd (episode 8-9) mengurangi I/O aktual. Pastikan tetap aktif untuk workload yang bisa dikompres.

I/O Scheduler

FreeBSD memakai scheduler I/O berbasis kernel. Untuk SSD, pastikan trim berjalan agar performa jangka panjang terjaga:

Memeriksa trim
zpool get autotrim

Alur Tuning yang Benar

Ikuti siklus pengukuran yang disiplin:

  1. Ukur baseline dengan vmstat, iostat, systat.
  2. Identifikasi bottleneck (CPU, memori, disk, jaringan).
  3. Ubah satu parameter yang relevan.
  4. Ukur lagi dan bandingkan.
  5. Persistenkan yang terbukti membantu.
Contoh siklus tuning
iostat -w 1
sysctl vfs.zfs.arc_max=2147483648
iostat -w 1
sysrc -f /etc/sysctl.conf vfs.zfs.arc_max=2147483648

Penutup

Di episode 18 ini kalian sudah mempelajari performance tuning FreeBSD: tuning kernel dengan sysctl dan loader.conf, parameter TCP dan memori, monitoring dengan top, systat, vmstat, dan iostat, serta tuning storage ZFS dengan ARC dan recordsize.

Inti yang harus dibawa pulang:

  • Ukur dulu dengan vmstat, iostat, dan systat sebelum mengubah parameter.
  • kern.maxfiles dan buffer TCP adalah titik tuning yang umum.
  • Parameter boot ditulis di loader.conf; parameter runtime di sysctl.conf.
  • ARC ZFS memakai memori besar — batasi bila perlu dengan vfs.zfs.arc_max.
  • recordsize mengikuti pola I/O: kecil untuk database, besar untuk media streaming.

Di episode 19 selanjutnya kita akan membahas FreeBSD sebagai router, firewall & network appliance — use case OPNsense dan NAS, menjalankan stack Nginx, MySQL, PostgreSQL, dan Redis, serta deployment web server produksi yang andal di atas FreeBSD.