Dihitung 100% di browser Anda — spesifikasi server Anda tidak dikirim ke mana pun

Kalkulator Tuning Server SIMGos

Masukkan spesifikasi server dan jumlah pengguna Anda. Kalkulator ini menghasilkan konfigurasi siap salin untuk Apache, PHP-FPM, MySQL, dan Tomcat — lengkap dengan anggaran RAM dan peringatan jebakan yang sering menjatuhkan server rumah sakit.
Baca panduan lengkapHire Us

Tidak sempat menerapkannya sendiri? Kami bisa mengerjakannya untuk Anda — sepenuhnya remote.

Spesifikasi Penggunaan Anda
Susunan server
Server tunggal (semua layanan)

Pengguna bersamaan di jam sibuk
Petugas yang login dan aktif bekerja pada saat yang sama — bukan total akun. Seluruh ukuran dihitung dari angka puncak; angka minimum dipakai untuk menilai seberapa berfluktuasi beban Anda.

Menentukan saran mode process manager


GB

Menentukan innodb_buffer_pool_size

Tipe penyimpanan
Profil alokasi
Mengatur seberapa besar porsi worker PHP terhadap kapasitas Apache.
Server tunggal

httpd + php-fpm + mysqld + tomcat dalam satu mesin32 GB RAM, 8 vCPU

Apache MaxRequestWorkers
200
ServerLimit 8 x 25
Apache ServerLimit
8
ubah = restart penuh
PHP-FPM max_children
100
sesuai aturan kapasitas
MySQL buffer pool
10GB
8 instance
MySQL max_connections
200
> total worker PHP
Tomcat heap
2G
Xms 1G • G1GC
Tomcat maxThreads
20
laporan bersamaan
Redis maxmemory
512 MB
sesi pengguna
Anggaran RAM
Sistem operasi 2 GB
MySQL 13 GB
PHP-FPM 2 GB
Tomcat 2,8 GB
Apache 0,5 GB
Redis 0,5 GB
Opcache 0,3 GB
Sisa 10,9 GB
Total dialokasikan 21,1 GB dari 32 GB. Sisa dipakai Linux sebagai page cache dan ruang aman saat beban melonjak.
Rantai kapasitas server ini

Apache 200 → PHP-FPM 100 → MySQL 200

Setiap tahap tidak boleh lebih kecil dari tahap sebelumnya. Rem ditahan di Apache, bukan di database.
File konfigurasi (13)

Backup, backup dan SELALU BACKUP file aslinya dulu, salin isi di bawah, validasi sintaks, baru restart.

Penjelasan
# Dihasilkan oleh Kalkulator Tuning Server DEKATE (dekate.id/tuning-server)
# Peran: Server tunggal | 32 GB RAM | 8 vCPU | target 100 pengguna bersamaan
#
# MaxRequestWorkers WAJIB = ServerLimit x ThreadsPerChild.
# Kalau tidak, Apache diam-diam memakai angka yang lebih kecil dan menulis
# peringatan AH00515 setiap kali start.

<IfModule mpm_event_module>
    StartServers             4
    ServerLimit              8
    ThreadsPerChild          25
    MaxRequestWorkers        200
    MinSpareThreads          25
    MaxSpareThreads          75
    MaxConnectionsPerChild   10000
</IfModule>

Timeout               60
KeepAlive             On
KeepAliveTimeout      5
MaxKeepAliveRequests  100

ServerTokens Prod
ServerSignature Off
Terapkan:httpd -t && systemctl reload httpd

Penjelasan
; Dihasilkan oleh Kalkulator Tuning Server DEKATE (dekate.id/tuning-server)
; Peran: Server tunggal | 32 GB RAM | 8 vCPU | target 100 pengguna bersamaan
;
; Tambahkan/ubah baris berikut di dalam blok [www].
; Perhatikan: JANGAN ada titik koma di akhir nilai — "30s;" membuat
; nilainya diabaikan tanpa pesan error apa pun.

pm = ondemand
pm.max_children = 100
pm.process_idle_timeout = 30s
pm.max_requests = 500

; Catatan: pada mode ondemand, pm.start_servers / min_spare_servers /
; max_spare_servers DIABAIKAN sepenuhnya.

pm.status_path = /php-fpm-status
ping.path = /php-fpm-ping

; Permintaan lebih lama dari 10 detik dicatat lengkap dengan baris kodenya.
; Ini alat diagnosa terpenting yang Anda punya.
request_slowlog_timeout = 10s
slowlog = /var/log/php-fpm/www-slow.log

; JANGAN pasang request_terminate_timeout di server ini —
; operasi BPJS/INACBG/tagihan yang sah memang berdurasi panjang
; dan akan ikut terbunuh.

; --- Sesi Redis (bagian 9 panduan) ---
; Mengaktifkan ini akan mengeluarkan SEMUA pengguna sekali. Lakukan di jam sepi.
php_value[session.save_handler] = redis
php_value[session.save_path]    = "tcp://127.0.0.1:6379"
Terapkan:php-fpm -t && systemctl reload php-fpm

Penjelasan
; Dihasilkan oleh Kalkulator Tuning Server DEKATE (dekate.id/tuning-server)
; Peran: Server tunggal | 32 GB RAM | 8 vCPU | target 100 pengguna bersamaan
;
; Ubah baris-baris berikut pada file yang sudah ada (jangan menambah blok baru).

memory_limit         = 256M   ; per permintaan, bukan total
max_execution_time   = 120
post_max_size        = 32M
upload_max_filesize  = 32M
max_input_vars       = 5000    ; form SIMGos panjang, bawaan 1000 sering kurang
realpath_cache_size  = 4M
realpath_cache_ttl   = 600
expose_php           = Off
Terapkan:systemctl reload php-fpm

Penjelasan
; Dihasilkan oleh Kalkulator Tuning Server DEKATE (dekate.id/tuning-server)
; Peran: Server tunggal | 32 GB RAM | 8 vCPU | target 100 pengguna bersamaan
;
; Tanpa opcache, PHP menerjemahkan ulang ribuan file SIMGos pada SETIAP
; permintaan. Beda kecepatannya 2-3 kali lipat.

zend_extension=opcache
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1     ; biarkan 1 supaya deploy langsung terbaca
opcache.revalidate_freq=2
opcache.save_comments=1           ; WAJIB 1 — Laminas membaca anotasi
opcache.fast_shutdown=1
Terapkan:systemctl reload php-fpm

Penjelasan
# Dihasilkan oleh Kalkulator Tuning Server DEKATE (dekate.id/tuning-server)
# Peran: Server tunggal | 32 GB RAM | 8 vCPU | target 100 pengguna bersamaan
#
# PERIKSA DULU: grep -n "includedir" /etc/my.cnf
# MySQL versi resmi tidak selalu punya "!includedir /etc/my.cnf.d/".
# Tanpa baris itu, file ini diabaikan diam-diam.
#
# PERIKSA JUGA: grep -n "max_connections" /etc/my.cnf /etc/my.cnf.d/*.cnf
# Kalau sebuah setelan muncul dua kali, yang berlaku adalah yang TERAKHIR.

[mysqld]

# === Memori ===
innodb_buffer_pool_size        = 10G
innodb_buffer_pool_instances   = 8
innodb_redo_log_capacity       = 2G
innodb_log_buffer_size         = 64M

# === Disk I/O (SSD) ===
innodb_flush_method            = O_DIRECT
innodb_flush_log_at_trx_commit = 2  # 2 = lebih cepat. Transaksi <=1 detik terakhir bisa hilang saat listrik mati mendadak (aman karena ada UPS).
innodb_io_capacity             = 1000
innodb_io_capacity_max         = 2000
innodb_flush_neighbors         = 0

# === Koneksi ===
# Harus lebih besar dari total pm.max_children semua server aplikasi,
# ditambah cadangan untuk cron integrasi (SATUSEHAT, BPJS, aplicares, RSOnline, SITB).
max_connections                = 200
thread_cache_size              = 32
table_open_cache               = 4000
table_definition_cache         = 2000
skip_name_resolve              = 1   # semua grant HARUS memakai IP, bukan hostname

# === Buffer per sesi (kecil! nilainya dikalikan jumlah koneksi) ===
sort_buffer_size               = 2M
join_buffer_size               = 2M
read_buffer_size               = 256K
read_rnd_buffer_size           = 512K

# === Tabel sementara (laporan SIMGos berat) ===
tmp_table_size                 = 256M
max_heap_table_size            = 256M

# === Rem laporan liar ===
# Hanya berlaku untuk SELECT, jadi aman untuk transaksi tulis.
# Tanpa ini, satu laporan yang tertahan bisa berjalan belasan jam dan
# menyandera backup malam.
max_execution_time             = 120000

# === Keamanan & visibilitas ===
max_allowed_packet             = 64M
slow_query_log                 = 1
slow_query_log_file            = /var/log/mysql-slow.log
long_query_time                = 2
log_queries_not_using_indexes  = OFF   # JANGAN ON — slow log akan tercemar sampai belasan GB
log_slow_admin_statements      = OFF
performance_schema             = ON

# === Warm-up setelah restart ===
innodb_buffer_pool_dump_at_shutdown = 1
innodb_buffer_pool_load_at_startup  = 1
Terapkan:mysqld --validate-config && systemctl restart mysqld

Penjelasan
# MySQL butuh sekitar max_connections + table_open_cache x 2 file terbuka.
# Bawaan sering hanya 10000 — kurang untuk max_connections = 200.
# Berlaku setelah restart mysqld berikutnya.

[Service]
LimitNOFILE=32000
Terapkan:mkdir -p /etc/systemd/system/mysqld.service.d && systemctl daemon-reload && systemctl restart mysqld

Penjelasan
# Dihasilkan oleh Kalkulator Tuning Server DEKATE (dekate.id/tuning-server)
# Peran: Server tunggal | 32 GB RAM | 8 vCPU | target 100 pengguna bersamaan
#
# Kalau sudah ada baris -Djava.rmi.server.hostname=... untuk JMX, JANGAN diubah.

CATALINA_OPTS="$CATALINA_OPTS -Xms1G -Xmx2G"

# G1GC = petugas kebersihan bertim. SerialGC (bawaan lama) membuat Tomcat
# tampak "hang" padahal sedang tercekik garbage collection.
CATALINA_OPTS="$CATALINA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
CATALINA_OPTS="$CATALINA_OPTS -XX:MaxMetaspaceSize=384m"
CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=true"

# Kalau kehabisan memori: tinggalkan bukti, lalu MATI BERSIH supaya systemd
# bisa menghidupkan ulang otomatis. Tanpa ini Tomcat menggantung selamanya.
CATALINA_OPTS="$CATALINA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tomcat/logs"
CATALINA_OPTS="$CATALINA_OPTS -XX:+ExitOnOutOfMemoryError"

# Rem darurat JasperReports.
CATALINA_OPTS="$CATALINA_OPTS -Dnet.sf.jasperreports.governor.max.pages=5000"
CATALINA_OPTS="$CATALINA_OPTS -Dnet.sf.jasperreports.governor.timeout=300000"

export CATALINA_OPTS
Terapkan:systemctl restart tomcat

Penjelasan
# Type=forking TANPA PIDFile membuat systemd kehilangan jejak proses,
# sehingga Restart=on-failure tidak pernah berfungsi. Ini pernah membuat
# auto-recovery "ada di config tapi tidak pernah jalan" selama berbulan-bulan.
#
# UMASK=0002 membuat Jasper menulis PDF yang bisa dibaca grup — mengurangi
# ketergantungan pada sudo chmod.

[Service]
Type=forking
PIDFile=/opt/tomcat/temp/tomcat.pid
Restart=on-failure
RestartSec=10
UMASK=0002
Terapkan:systemctl daemon-reload && systemctl restart tomcat

Penjelasan
<!-- Ganti blok <Connector port="8080" ...> yang sudah ada dengan ini.
     Bawaan Tomcat ~200 thread: 200 laporan bersamaan pasti menghabiskan heap.
     Mengantre jauh lebih baik daripada semuanya gagal karena kehabisan memori. -->

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           maxThreads="20"
           acceptCount="40"
           redirectPort="8443" />
Terapkan:systemctl restart tomcat

Penjelasan
# SIMGos mensyaratkan baris ini. Tanpanya SEMUA cetak laporan gagal dengan
# pesan "Failed to load PDF document", sementara HTTP status tetap 200 dan
# Content-Length 0 — sehingga lolos dari pemantauan berbasis status code.
#
# Sering hilang saat migrasi/instal ulang OS, karena /etc/sudoers memang
# sengaja tidak disalin antar versi distro.
#
# Pasang sebagai drop-in, JANGAN edit /etc/sudoers langsung:
#   echo 'apache ALL=(ALL) NOPASSWD: ALL' > /tmp/s && visudo -cf /tmp/s \
#     && install -m 0440 -o root -g root /tmp/s /etc/sudoers.d/simgos

apache ALL=(ALL) NOPASSWD: ALL
Terapkan:echo 'apache ALL=(ALL) NOPASSWD: ALL' > /tmp/s && visudo -cf /tmp/s && install -m 0440 -o root -g root /tmp/s /etc/sudoers.d/simgos

Penjelasan
# Tambahkan di AKHIR file. Hanya localhost — jangan pernah dibuka ke jaringan.
#
# PENTING: AlmaLinux/RHEL 9 mengirim SEMUA baris "save" dalam keadaan
# dikomentari. Tanpa baris save, setiap restart Redis menghapus seluruh
# session dan semua pengguna ter-logout.

bind 127.0.0.1 -::1
protected-mode yes

maxmemory 512mb
maxmemory-policy allkeys-lru

save 3600 1
save 300 100
save 60 10000
Terapkan:dnf install -y redis php-pecl-redis5 && systemctl enable --now redis && redis-cli ping

Penjelasan
# Dihasilkan oleh Kalkulator Tuning Server DEKATE (dekate.id/tuning-server)
# Peran: Server tunggal | 32 GB RAM | 8 vCPU | target 100 pengguna bersamaan

net.core.somaxconn = 4096
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10000 65535
vm.swappiness = 10
Terapkan:sysctl -p /etc/sysctl.d/99-simgos.conf

Penjelasan
# Tambahkan tiga baris ini pada perintah xtrabackup yang sudah ada.
#
# Artinya: kalau ada query yang menghalangi lebih dari 2 menit, BUNUH query
# itu dan lanjutkan backup. Lebih baik satu laporan gagal dicetak daripada
# tidak ada backup semalam.
#
# Tanpa ini, satu stored procedure laporan yang tertahan (pernah berjalan
# 10-14 jam) menyandera tahap FLUSH TABLES, backup menggantung berjam-jam,
# lalu restart terjadwal menggagalkannya sama sekali.

xtrabackup --backup \
  --ftwrl-wait-timeout=120 \
  --kill-long-queries-timeout=120 \
  --kill-long-query-type=all \
  ...
Terapkan:edit script backup Anda, lalu uji satu kali secara manual

#!/usr/bin/env bash
# Urutan penerapan yang aman — Server tunggal (32 GB / 8 vCPU)
# Dihasilkan oleh Kalkulator Tuning Server DEKATE (dekate.id/tuning-server)
set -euo pipefail

# 1. Backup dulu. Kalau belum ada backup, jangan mulai.
for f in /etc/httpd/conf/httpd.conf /etc/php-fpm.d/www.conf /etc/php.ini /etc/php.d/10-opcache.ini /etc/my.cnf /opt/tomcat/bin/setenv.sh; do
  [ -f "$f" ] && cp -a "$f" "$f.bak-$(date +%Y%m%d-%H%M%S)"
done
mkdir -p /root/tuning-backup
tar -czf "/root/tuning-backup/pre-$(date +%Y%m%d-%H%M%S).tgz" /etc/php-fpm.d/ /etc/php.ini /etc/php.d/ \
    /etc/my.cnf /etc/my.cnf.d/ /etc/httpd/conf/ /etc/httpd/conf.d/ 2>/dev/null || true

# 2. Salin file konfigurasi dari kalkulator ke tempatnya masing-masing.
#    (lakukan manual, lalu jalankan lagi script ini mulai langkah 3)

# 3. Validasi sintaks SEBELUM menyentuh service apa pun.
httpd -t
php-fpm -t
mysqld --validate-config

# 4. Restart dari belakang ke depan.
systemctl restart mysqld
systemctl restart php-fpm
systemctl reload httpd
systemctl restart tomcat

# 5. Verifikasi.
systemctl is-active mysqld php-fpm httpd tomcat
free -h
grep -c AH00515 /var/log/httpd/error_log   # harus 0
pgrep -c php-fpm
php-fpm -m | grep redis   # harus muncul, kalau kosong login akan gagal

echo "Selesai. Backup ada di /root/tuning-backup/pre-$(date +%Y%m%d-%H%M%S).tgz"
Catatan untuk server ini
Sebelum Anda menerapkan

Semua peringatan di bawah berasal dari pengalaman & kejadian nyata di server rumah sakit / klinik — bukan teori.

Ingin tahu alasan di balik setiap angka?

Panduan lengkapnya menjelaskan tiap setelan dalam bahasa sehari-hari, lengkap dengan kamus istilah, cara mengukur beban server, 26 jebakan yang pernah menjatuhkan sistem produksi, dan langkah diagnosa dari gejala ke penyebab.

Buka panduan tuning
Alat ini gratis dan akan tetap gratis

Kalkulator dan panduannya kami susun dari pengalaman menangani server rumah sakit dan klinik sungguhan. Tidak ada iklan, tidak berbayar, dan tidak perlu mendaftar. Kalau ini menghemat waktu Anda, secangkir kopi sangat berarti untuk menjaga alat ini tetap diperbarui.

Tautan terbuka di tab baru. Halaman ini tidak memuat apa pun dari kedua layanan tersebut.