Tuning Optimasi Server untuk CBT/LMS

Daftar Isi

Pada postingan kali ini saya ingin berbagi tutorial bagaimana Tuning/Optimasi Server untu CBT/LMS agar performanya baik atau tidak lemot diakses secara bersamaan oleh banya siswa/user/peserta ujian.

Ceritanya saya disuruh membantu untuk menyetingkan VPS yang disewa oleh sebuah sekolah untuk kegiatan Penilaian/Asesmen kurang lebih 500 siswa secara bersamaan. VPS yang digunakan memiliki spek CPU 4 Core, RAM/Memori 8.

Cara Optimasi Server CBT
Cara Optimasi Server CBT

Aplikasi yang dipakai adalah Garuda CBT, namun saya yakin ini juga berguna jika menggunakan aplikasi lain.

Awalnya sudah yakin menggunakan VPS dengan spek tersebut akan bisa menghandle 500 siswa secara bersamaan, namun ternyata masih lemot dan kadang error. Padahal jika dilihat dari penggunaan CPU dan RAM tidak sampai 25%. 

Karena masih pemula saya juga bingung mengapa demikian, namun tanya oleh penyedia dijawab apakah sudah dioptimasi? Karena ini VPS maka biasanya penyedia tidak mau membantu seting paling hanya di kasih link-link referensi panduan.

Akhirnya saya menemukan sebuah video youtube yang berjudul "Tuning Xampp Performance, meningkatkan kinerja Apache dan MySQL untuk CBT/LMS"

Lha kok XAMPP? padahal yang akan saya seting VPS.

hmmm ya...sama sama ada Apache dan MySQL tentu akan sama lah... hehe

Namun sebelum lanjut perlu diklaimer dulu. Dengan menerapkan langkah-langkah yang akan saya share, Anda dapat meningkatkan performa server Apache dan MySQL. Tetaplah memantau kinerja server secara berkala dan terus mencari cara untuk meningkatkan efisiensi dan responsivitasnya.

Ketikan perintah htop untuk melihat penggunaan CPU dan RAM

Disini saya akan mengikuti yang ada dalam video tutorial tersebut, namun untuk angka-angka akan saya sesuaikan sendiri.

Optimasi MySQL

Dari referensi yang saya dapatkan dari sebuah chanel youtube untuk Optimasi MYSQL penggunaan innodb buffer tidak boleh melebihi dari 50% ruang memori yang tersedia (Free RAM).

Supaya aman gunakan 10-20% saja dari total RAM karena RAM masih digunakan untuk apache, dan aplikasi lainnya.

innodb_buffer_pool_size

Jika tipe/jenis databasenya inobdb cari bagian innodb_buffer_pool_size

key_buffer

Apabila database nya MyIsam rubah key_buffer

contoh: 1GB = 1024MB, 2GB = 2048MB, 4GB = 4096MB, 8GB = 8192MB, 16GB = 16384MB

Caranya masuk ke WHM  kemenu "SQL Services" --- "Edit SQL Configuration"

seting sql whm cpanel

Ubang angka pada InnoDB Buffer Pool Size (innodb_buffer_pool_size) sesuai kapasitas yang tersedia di sini saya mengis 2GB atau 2147483648 Bytes

The size in bytes of the buffer pool. The buffer pool is the memory area where InnoDB caches table and index data

Ukuran dalam byte kumpulan buffer. Kumpulan buffer adalah area memori tempat InnoDB menyimpan tabel dan data indeks

InnoDB Buffer Pool Size adalah parameter konfigurasi yang digunakan dalam pengaturan database MySQL. Fungsi utamanya adalah untuk menentukan seberapa besar memori yang akan dialokasikan oleh InnoDB untuk menyimpan data dan indeks yang dimuat ke dalam memori. Secara khusus, InnoDB Buffer Pool berperan sebagai cache di dalam memori untuk menyimpan data yang sering diakses, sehingga dapat mempercepat kinerja database dengan mengurangi jumlah akses ke penyimpanan disk yang lebih lambat.

Dengan mengatur Buffer Pool Size dengan benar, Anda dapat meningkatkan kinerja keseluruhan database dengan meminimalkan ketergantungan pada disk I/O. Namun, pengaturan yang tidak tepat bisa berdampak negatif terhadap kinerja. Sebagai contoh, jika ukuran Buffer Pool terlalu kecil, database mungkin akan sering melakukan akses ke penyimpanan disk, yang dapat mengurangi kinerja keseluruhan. Di sisi lain, mengalokasikan terlalu banyak memori untuk Buffer Pool juga dapat menyebabkan kurangnya memori yang tersedia untuk aplikasi lain di server.

Jadi, dalam rangka meningkatkan kinerja dan efisiensi database, penting untuk memahami dan menyesuaikan ukuran InnoDB Buffer Pool sesuai dengan kebutuhan aplikasi dan kapasitas server yang tersedia.

innodb buffer pool size

innodb_log_file_size adalah 15-25% nya dari innodb_buffer_pool_size

InnoDB Log File Size

The size of each InnoDB log file in a log group. Larger values mean less disk I/O due to less flushing, but also slower recovery from a crash.

Ukuran setiap file log InnoDB dalam grup log. Nilai yang lebih besar berarti lebih sedikit disk I / O karena lebih sedikit pembilasan, tetapi juga pemulihan yang lebih lambat dari crash.

Fungsi dari `innodb_log_file_size` adalah untuk menentukan ukuran file log transaksi InnoDB dalam MySQL. Log transaksi ini mencatat semua perubahan data yang terjadi di dalam database, seperti penambahan, pembaruan, atau penghapusan, dalam urutan tertentu. Ukuran file log transaksi yang lebih besar memungkinkan lebih banyak operasi untuk direkam dalam satu waktu tanpa perlu seringnya melakukan putaran atau rotasi file log.

Dengan mengatur `innodb_log_file_size` dengan bijak, Anda dapat mengoptimalkan kinerja database. Ukuran yang terlalu kecil mungkin menyebabkan log transaksi cepat mencapai batas dan memaksa database untuk melakukan putaran log secara teratur, yang dapat mengurangi kinerja. Di sisi lain, mengatur ukuran yang terlalu besar dapat menghabiskan ruang disk yang berlebihan.

Jadi, penyesuaian ukuran `innodb_log_file_size` harus dilakukan dengan mempertimbangkan kebutuhan aplikasi, kapasitas server, dan kebutuhan retensi data untuk memastikan keseimbangan antara kinerja dan penggunaan sumber daya.

max_allowed_packet isikan sesuai ukuran backup yang akan direstrore

innodb_log_buffer_size buat 16 MB

InnoDB Log Buffer Size


Optimasi Apache

Untuk optimasi Apache silahkan masuk menu "Software" ---"MultiPHP INI Editor" pilih versi PHPyang digunakan

seting optimasi apache php

max_execution_time batas waktu untuk eksekusi php

This sets the maximum time in seconds a script is allowed to run before it is terminated by the parser. This helps prevent poorly written scripts from tying up the server. The default setting is 30.

Ini menetapkan waktu maksimum dalam detik skrip diizinkan untuk dijalankan sebelum dihentikan oleh parser. Ini membantu mencegah skrip yang ditulis dengan buruk mengikat server. Pengaturan default adalah 30.

Fungsi dari `max_execution_time` adalah untuk menentukan batas waktu maksimum yang diperbolehkan untuk eksekusi sebuah skrip atau proses dalam sebuah lingkungan pemrograman, seperti PHP. Ketika nilai `max_execution_time` tercapai, eksekusi skrip atau proses akan dihentikan secara otomatis oleh interpreter atau server web.

Penyetelan `max_execution_time` penting untuk mengontrol kinerja dan keamanan aplikasi. Tanpa batasan waktu, sebuah skrip atau proses yang mengalami masalah atau terjebak dalam perulangan tak terbatas dapat menyebabkan penggunaan sumber daya yang berlebihan dan bahkan dapat menyebabkan server menjadi tidak responsif atau mati. Dengan membatasi waktu eksekusi, kita dapat memastikan bahwa skrip atau proses yang terjebak tidak menyebabkan dampak negatif pada kinerja atau ketersediaan server.

Pengaturan `max_execution_time` juga dapat digunakan sebagai langkah keamanan untuk melindungi server dari serangan yang bertujuan untuk menyebabkan penyalahgunaan sumber daya dengan cara menjalankan skrip atau proses yang berlarut-larut.

Dalam praktiknya, nilai `max_execution_time` harus dipilih dengan hati-hati untuk memastikan bahwa cukup waktu diberikan kepada skrip atau proses untuk menyelesaikan tugasnya, tetapi juga cukup singkat untuk mencegah penyalahgunaan sumber daya atau skrip yang mengalami kesalahan tanpa batas.

max_execution_time

max_input_time

max_input_time

max_input_vars

This sets the maximum number of input variables allowed per request and can be used to deter denial of service attacks involving hash collisions on the input variable names.

Ini menetapkan jumlah maksimum variabel input yang diizinkan per permintaan dan dapat digunakan untuk mencegah penolakan serangan layanan yang melibatkan tabrakan hash pada nama variabel input.

`max_input_vars` adalah sebuah pengaturan pada konfigurasi PHP yang menentukan jumlah maksimum variabel yang dapat diterima oleh server dalam satu request HTTP. Variabel-variabel ini dapat berupa variabel GET, POST, atau COOKIE.

Fungsi dari `max_input_vars` adalah untuk mengendalikan jumlah maksimum data yang dapat dikirimkan melalui formulir HTML atau melalui URL dalam satu request. Hal ini penting untuk menghindari serangan Denial-of-Service (DoS) atau serangan serupa di mana sejumlah besar variabel dikirimkan ke server dalam satu waktu, yang dapat menyebabkan server kelebihan beban atau bahkan menyebabkan kegagalan server.

Dengan mengatur nilai `max_input_vars`, kita dapat membatasi jumlah variabel yang dapat diterima oleh server, sehingga memperkuat keamanan dan stabilitas server. Nilai yang disetel harus dipertimbangkan secara hati-hati untuk memastikan bahwa cukup untuk kebutuhan aplikasi, tetapi tidak terlalu besar sehingga memungkinkan penyalahgunaan sumber daya atau serangan yang merugikan.

max_input_vars

memory_limit 25% dari total RAM

This sets the maximum amount of memory in bytes that a script is allowed to allocate. This helps prevent poorly written scripts for eating up all available memory on a server. Note that to have no memory limit, set this directive to -1

Ini menetapkan jumlah maksimum memori dalam byte yang diizinkan untuk dialokasikan oleh skrip. Ini membantu mencegah skrip yang ditulis dengan buruk untuk menghabiskan semua memori yang tersedia di server. Perhatikan bahwa untuk tidak memiliki batas memori, atur direktif ini ke -1

Fungsi dari `memory_limit` adalah untuk menetapkan batasan maksimum penggunaan memori yang dapat digunakan oleh skrip PHP selama eksekusi. Ketika skrip melebihi batas ini, PHP akan menghentikan eksekusi skrip dan menghasilkan pesan kesalahan seperti "Fatal error: Allowed memory size of xxx bytes exhausted".

Penetapan batasan memori sangat penting dalam mengelola sumber daya server. Tanpa batasan yang tepat, skrip PHP yang mengonsumsi memori secara berlebihan dapat mengakibatkan penggunaan memori yang berlebihan dan menyebabkan server menjadi tidak responsif atau bahkan crash.

Dengan mengatur `memory_limit`, administrator server dapat mengontrol seberapa banyak memori yang dapat digunakan oleh setiap skrip PHP, menjaga stabilitas dan kinerja server secara keseluruhan. Nilai `memory_limit` harus dipilih dengan hati-hati untuk mencocokkan kebutuhan aplikasi, memastikan bahwa cukup memori tersedia untuk menjalankan skrip, tetapi tidak terlalu besar sehingga memungkinkan penyalahgunaan sumber daya.

memory_limit

post_max_size untuk keperluan upload

upload_max_filesize

Sumber reverensi:



Akhir Kata

Demikianlah cara saya Cara tuning optimasi server MySQL dan Apache PHP untuk CBT/LMS agar performanya lebih baik.

Jika ada dari Anda yang lebih paham, mohon sekiranya untuk memberikan koreksi. Terima kasih

Suber referensi: 
https://chat.openai.com/
https://www.youtube.com/watch?v=VK53fdfHKqA
Nir Singgih
Nir Singgih Seorang operator sekolah yang ingin berpartisipasi memajukan pendidikan dengan membantu Bapak/Ibu Guru membuat administrasi dan menyajikan data valid.

Posting Komentar