Untuk melakukan performance tuning pada Passenger, terdapat beberapa pengaturan yang umum digunakan dan dapat Anda sesuaikan dengan kapasitas server serta karakteristik aplikasi.
Perintah-perintah ini biasanya ditempatkan di dalam blok http, server, atau location pada file konfigurasi Nginx (biasanya /etc/nginx/nginx.conf atau conf.d/passenger.conf).
Manajemen Resource Sistem (File Descriptors) #
Mencegah error “too many open files” saat trafik tinggi.
passenger_core_file_descriptor_ulimit <integer>;- Context:
http - Fungsi: Mengatur batas file descriptor (ulimit) untuk proses inti Passenger.
- Tuning: Tingkatkan nilai ini jika Anda sering melihat error “too many file descriptors” pada log sistem.
- Context:
passenger_app_file_descriptor_ulimit <integer>;- Context:
http,server,location - Fungsi: Mengatur batas file descriptor khusus untuk proses aplikasi.
- Tuning: Gunakan ini jika error berasal dari proses aplikasi, bukan proses inti Passenger.
- Context:
Manajemen Proses & Pooling #
Mengontrol jumlah proses aplikasi untuk menyeimbangkan penggunaan memori dan kemampuan menangani concurrent requests.
passenger_max_pool_size <integer>;(Default: 6)- Context:
http - Fungsi: Jumlah maksimum total proses aplikasi yang boleh berjalan secara bersamaan.
- Tuning: Tingkatkan nilai ini untuk menangani lebih banyak request konkuren (membutuhkan lebih banyak RAM). Turunkan jika server kekurangan memori.
- Context:
passenger_min_instances <integer>;(Default: 1)- Context:
http,server,location - Fungsi: Jumlah minimum proses yang harus tetap hidup untuk sebuah aplikasi.
- Tuning: Atur ke nilai > 0 (misalnya 3 atau 5) untuk menghindari delay saat pengunjung pertama kali mengakses aplikasi yang sedang idle.
- Context:
passenger_max_instances <integer>;(Default: 0 / Unlimited)- Context:
http,server,location - Fungsi: Membatasi jumlah maksimum proses untuk satu aplikasi tertentu (per-virtual host).
- Tuning: Gunakan ini jika Anda meng-hosting banyak aplikasi di satu server untuk mencegah satu aplikasi memonopoli seluruh pool.
- Context:
passenger_max_instances_per_app <integer>;(Default: 0)- Context:
http - Fungsi: Mirip dengan di atas, tetapi berlaku global untuk semua aplikasi.
- Context:
passenger_pool_idle_time <seconds>;(Default: 300)- Context:
http - Fungsi: Waktu (dalam detik) proses aplikasi dibiarkan idle sebelum dimatikan untuk menghemat memori.
- Tuning: Set ke
0agar proses tidak pernah dimatikan (disarankan untuk server dedicated agar response selalu cepat). Perkecil nilainya untuk menghemat RAM.
- Context:
Concurrency & Threading #
Mengoptimalkan cara aplikasi menangani request (khususnya Ruby).
passenger_concurrency_model process|thread;(Default: process)- Context:
http,server,location - Fungsi: Menentukan model konkurensi.
- Tuning: Gunakan
threaduntuk penggunaan memori yang lebih efisien jika aplikasi Anda thread-safe.
- Context:
passenger_thread_count <integer>;(Default: 1)- Context:
http,server,location - Fungsi: Jumlah thread per proses (hanya berlaku jika
passenger_concurrency_modeldiset kethread). - Tuning: Tingkatkan nilai ini (misal 5-20) untuk meningkatkan kapasitas request per proses.
- Context:
passenger_force_max_concurrent_requests_per_process <number>;(Default: -1)- Context:
http,server,location - Fungsi: Memaksa Passenger menganggap aplikasi bisa menangani jumlah request konkuren tertentu per proses.
- Tuning: Set ke
0untuk aplikasi Ruby yang menggunakan WebSockets/SSE. Set ke angka tertentu untuk membantu dynamic process scaling.
- Context:
Startup & Preloading #
Mengurangi waktu loading saat aplikasi pertama kali diakses.
passenger_pre_start <url>;- Context:
http - Fungsi: Memaksa aplikasi untuk start saat Nginx dimulai, bukan menunggu request pertama.
- Tuning: Sangat disarankan digabungkan dengan
passenger_min_instances. Contoh:passenger_pre_start http://example.com/;
- Context:
passenger_max_preloader_idle_time <seconds>;(Default: 300)- Context:
http,server,location - Fungsi: Waktu idle sebelum proses preloader dimatikan.
- Tuning: Set ke
0atau nilai tinggi agar proses spawning berikutnya jauh lebih cepat.
- Context:
Queueing & Connection Handling #
Mengatur antrian request saat server penuh.
passenger_max_request_queue_size <integer>;(Default: 100)- Context:
http,server,location - Fungsi: Maksimum jumlah request yang bisa mengantri di dalam Passenger.
- Tuning: Jika antrian penuh, request baru akan langsung error 503. Tingkatkan nilai ini untuk menahan lonjakan trafik jangka pendek (burst), atau set ke
0untuk tidak terbatas.
- Context:
passenger_max_request_queue_time <seconds>;(Default: 0)- Context:
http,server,location - Fungsi: Maksimum waktu request boleh mengantri.
- Tuning: Set ke nilai (misal 30) agar pengunjung tidak menunggu terlalu lama; jika lewat batas, akan muncul error 504.
- Context:
passenger_socket_backlog <size>;(Default: 2048)- Context:
http - Fungsi: Ukuran antrian koneksi socket dari Nginx ke Passenger.
- Tuning: Tingkatkan nilai ini jika Anda mengubah
worker_connectionsdi Nginx ke nilai yang sangat tinggi untuk mencegah error “Resource temporarily unavailable”.
- Context:
passenger_app_connect_timeout <integer>;(Default: 30)- Context:
http,server,location - Fungsi: Waktu tunggu maksimal Passenger mencoba terhubung ke socket aplikasi.
- Context:
Caching & I/O #
passenger_turbocaching on|off;(Default: on)- Context:
http - Fungsi: Mengaktifkan atau menonaktifkan cache respons kecil.
- Tuning: Biarkan
onuntuk performa terbaik, matikan (off) jika membutuhkan kontrol cache yang sangat spesifik atau dinamis sepenuhnya.
- Context:
passenger_stat_throttle_rate <seconds>;(Default: 10)- Context:
http,server,location - Fungsi: Mengurangi frekuensi pengecekan file sistem (seperti
restart.txt). - Tuning: Tingkatkan nilainya jika aplikasi berada di storage NFS atau disk I/O yang lambat untuk mengurangi beban server.
- Context:
passenger_response_buffer_high_watermark <bytes>;(Default: 134217728 / 128MB)- Context:
http,server,location - Fungsi: Ukuran buffer untuk respons aplikasi.
- Tuning: Turunkan nilai ini jika Anda ingin mendeteksi client disconnect lebih cepat saat streaming data besar.
- Context:
Contoh Konfigurasi Gabungan (Snippet) #
Berikut adalah contoh penerapan tuning untuk server dengan trafik tinggi dan memori cukup:
Nginx:
http {
# 1. Global Resource Limits
passenger_core_file_descriptor_ulimit 65535;
# 2. Pooling: Siapkan lebih banyak proses, jangan biarkan mati
passenger_max_pool_size 30; # Sesuaikan dengan RAM
passenger_min_instances 5; # Selalu siapkan 5 proses
passenger_pool_idle_time 0; # Proses tidak pernah dimatikan karena idle
# 3. Queueing: Tahan lonjakan trafik
passenger_max_request_queue_size 200; # Antrian lebih banyak
passenger_max_request_queue_time 60; # Maksimal antri 60 detik
# 4. I/O Optimization
passenger_stat_throttle_rate 30; # Kurangi cek disk
server {
listen 80;
server_name example.com;
root /var/www/example/public;
passenger_enabled on;
# 5. Pre-start agar tidak ada delay saat akses pertama
# (biasanya diletakkan di luar blok server, tapi diarahkan ke URL ini)
}
# Letakkan pre-start di level http
passenger_pre_start http://example.com/;
}Standalone:
passenger start \
--environment production \
--daemonize \
--port 30000 \
--app-type rack \
--startup-file config.ru \
--instance-registry-dir /home/user/tmp/ \
--pid-file /home/user/run/passenger.30000.pid \
--log-file /home/user/logs/passenger.30000.log \
--max-pool-size 30 \
--min-instances 5 \
--pool-idle-time 0 \
--max-request-queue-size 200 \
--core-file-descriptor-ulimit 65535 \
--max-requests 1000 \
--friendly-error-pages \
--envvar PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/kerberos/sbin:/usr/kerberos/bin:/sbin:/bin:/root/bin \
--envvar RAILS_ENV=production \
--envvar RACK_ENV=production \
--load-shell-envvars