Mungkin pengalaman saya ini cukup bisa memberi pelajaran.
Jadi saya beberapa waktu lalu menjual web wallpaper saya. Spesifikasi hosting untuk web wallpaper itu yang paling penting adalah space yang besar. Web wallpaper yang saya jual kemaren memiliki ukuran 30GB.
Si klien nanya spek hosting yang cocok, dia pengennya Shared hosting dari Hotgator, cuma saya tidak direkomendasikan, saya tolak karena meskipun judul nya Unlimited, tetep saja Hosgator membatasi jumlah inode
maksimal 250.000 buah inode
.
Sebagai informasi yang saya tahu, inode
adalah jumlah seluruh file dan folder dalam suatu folder. Misal saya punya folder bernama Foto di dalam folder itu ada 10 foto, maka total inode
adalah 11 yang terdiri dari 10 file foto dan 1 folder Foto.
Kembali lagi ke masalah hosting, saya kemudian menyarankan klien untuk menyewa VPS saja karena inode
web wallpaper saya lebih dari 250rb buah.
Setelah diskusi saya menyarankan dia untuk nyewa di Vultr karena dengan $5 per bulan bisa mendapat ruang HD 125GB, memang belum SSD, tapi spek itu sdh lebih dari cukup (kalo yang SSD hanya 30GB).
Spek detail VPS nya adalah: 512 MB RAM, 1 core CPU, 125GB SATA, CentOS 6 64 bit.
Si klien ini ngga ngerti cara mengoperasikan VPS, dia minta saya untk install cPanel.
Berhubung saya ngga ngerti cara nginstall cPanel (karena ngga kebeli) saya carikan alternatif panel yaitu Webuzo.
Skip skip skip…
Setelah saya install Webuzo, lalu kok aneh ya, penggunaan RAM oleh MySQL cukup besar, padahal NS belum diarahkan ke VPS, masih ke Dedicated Server saya.
Setelah semua file saya pindahkan dari server saya ke VPS Vultr, saya minta klien untuk arahkan NS nya ke IP VPS.
Namun beberapa jam setelah itu VPS selalu mati, saya reboot server, 20 menit kemudian mati lagi. Begitu terus… Saya ganti MySQL jadi MariaDB tapi tetep aja ngga nyelesain masalah.
Aneh memang, padahal saya punya beberapa VPS yang memiliki spek lebih rendah (256MB RAM, Debian 7) yang saya install LEMP lancar-lancar aja tanpa downtime.
Tadinya saya mau nyaranin si klien buat diinstall LEMP aja (tanpa Webuzo) agar lebih ringan, atau minta dia buat upgrade RAM jadi 1GB. Dia udah setuju tapi saya masih penasaran atas penyakit MySQL tiba-tiba mati tersebut.
Saya kemudian melihat error log mysql dengan perintah
tail -f /var/log/mysqld.log
Dan hasilnya seperti ini:
Setelah Googling dengan kata kunci “Fatal error: cannot allocate memory for the buffer pool” akhirnya saya nemu jawaban dan narik kesimpulan seperti berikut.
Sesuai informasi dari situs resmi Webuzo, bahwa minimal RAM untuk Webuzo adalah 1GB, sementara itu, VPS yang saya seting hanya punya 512MB RAM, artinya ada kekurangan.
Konyol nya saya, saya ngga ngeuh kalo saya blm membuat file SWAP memory sebagai backup jika sewaktu-waktu memori utama habis. Vultr sendiri secara default ngga membuatkan memori swap saat instalasi.
Kemudian saya membuat file swap dan sampe sekarang MySQL pada VPS pun lancar dan tidak mati lagi seperti sebelumnya.
Bagi yang belum tau, swap memory itu semacam memory virtual / RAM tambahan yang diambil dari harddisk, jadi sangat membantu memori utama.
Lalu bagaimana cara membuat file swap?
Memory VPS yang saya setting memiliki RAM 512 MB. Untuk cari aman, saya buat Swap memory menjadi 2 x memori utama, artinya 1GB. 1GB = 1024k. Maka, tinggal lakukan perintah ini lewat SSH Client.
dd if=/dev/zero of=/swap.file bs=1024 count=1024k
mkswap /swap.file
swapon /swap.file
Lalu edit file konfigurasi, saya edit pake vi editor
vi /etc/fstab
Lalu tambahkan kode ini di baris paling akhir
/swap.file none swap sw 0 0
Beres deh.
Setelah itu, silahkan cek dengan perintah free -m
, harus nya nanti bakal keliatan di kolom total pada baris Swap ada berapa (punya saya di bawah ini: 1023).
Selain itu, saya tuning konfigurasi mysql yang ada di Webuzo. Di bawah bagian [mysqld]
saya tambahkan kode berikut:
innodb_buffer_pool_size=64M
Lalu saya restart MySQL server nya.
Lihat penampakan htop
saya setelah dibuat memori swap
Kalo ditotal memori yang dipakai adalah 359+190 = 549. Sebelumnya pantas saja MySQL sering mati (down) tiap 20 menit karena RAM nya abis karena hanya punya 512MB.
Nah kalo ada yang memiliki error seperti di atas (Fatal error: cannot allocate memory for the buffer pool) kemungkinan VPS nya kekurangan memori, silahkan buat memori swap, mudah-mudahan lancar.
Solusi Tambahan: Menghidupkan MySQL / MariaDB Yang Mati Di Webuzo
Agar lebih afdol, maka kita harus melakukan langkah selanjutnya. Ini diperlukan jika solusi di atas gagal (mysql / mariadb tetap suka mati sendiri), jadi ikuti saja ya langkah selanjutnya. Tidak susah kok.
Kita akan membuat suatu perintah yang akan mengecek program mysql setiap menit.
Setiap menitnya, program akan mememerika service mysql, jika mysql hidup, maka program tidak melakukan apa-apa, jika mysql mati, maka program akan berusaha menghidupkannya.
Pertama kita buat dulu programnya, ketik perintah berikut:
cd ~
vi jalankan-mysql.sh
Copy paste kode di bawah!
#!/bin/bash PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin if [[ ! "$(service mysqld status)" =~ "start/running" ]] then service mysqld start fi
Kalau Anda menggunakan mariadb maka ganti kode “service mysqld status
” di atas, menjadi “service mariadb status
“. Juga ganti kode “service mysqld start
” menjadi “service mariadb start
”
Save kalo sudah, dan jalankan
chmod +x jalankan-mysql.sh
Setelah selesai membuat program nya, kita harus integrasikan dengan cronjob. Cronjob itu kaya “to do list” yang akan dijalankan sesuai jadwal yang kita tentukan (Ibarat kita nyeting alarm maka di jam tersebut alarm akan hidup).
Cara setting cronjob-nya adalah sbb.
Tapi sebelum setting, pastikan cron sudah terinstall, kalau belum terinstall silahkan install dulu.
Untuk CentOS, perintahnya yum install cronie
Untuk Ubuntu, perintahnya apt-get install cron
Setelah terinstall tinggal jalankan perintah ini
crontab -e
Lalu tambahkan kode ini di baris paling awal (sisa baris yang ada diturunkan ke bawah aja)
*/1 * * * * /root/jalankan-mysql.sh
Jika editor untuk crontab bernama nano
maka save dengan menekan kombinasi tombol CTRL+O diakhiri dengan Enter. Jika editor nya vi
maka tinggal eksekusi perintah :wq
.
Selesai.
Untuk mengujinya, kita akan dengan sengaja mematikan service mysql. Caranya:
service mysqld stop
Kalau Anda menggunakan mariadb maka ganti perintah “service mysqld stop
” menjadi “service mariadb stop
”
Cek website, seharusnya web sekarang error. Lalu, tunggu selama 1 menit dan cek kembali website, seharusnya web akan kembali live.
Wah, webuzo berat yak, itu CPU nya 100% 😮
100% karena saat saya ambil SS server sedang terima trafik lumayan.
wow.. keren ni mas… saya pake webuzo juga kadang2 mysqlnya mati jadi mesti restart terus… oiya nanya mas… di webuzo saya ada dua web service apache dan nginx.. nah setiap saya matiin apache.. nyalain nginx.. selalu error gamau live.. tp pas apache nya nyala baru bisa… saya mau ganti aja nih dari apache ke nginx gimana caranya mas defaultnya jadi nginx dan mau buang apachenya?? trims nuhun yah mas 🙂
Login Webuzo,
1. Akses http://IPVPS:2002/kode-aneh/index.php?act=apps&app=3
2. “Remove”
3. Akses http://IPVPS:2002/kode-aneh/index.php?act=apps&app=18 . Pilihannya kalau ada tombol “Remove”, Remove dulu (tidak wajib tapi agar afdol), lalu jalankan ke no 4. Kalau tidak ada tombol “Remove” langsung ke no. 4.
4. Ceklist pada pilihan “Set Default”, Klik install.
Maka sekarang Server untuk melayani web pake Nginx
NAMUN…
Nginx + Webuzo + WordPress tidak akur, perlu ada modifikasi, kalau tidak dimodif akan error saat make SEO permalink. Untuk mengatasinya, login SSH, Edit file ini
/usr/local/apps/nginx/etc/conf.d/common
Tambahkan kode berikut di akhir baris.
Save kalau sudah & restart service nginx.
mas sudah berhasil naik pake nginx… sudah ditambah juga file yang permalinks di atas sudah restart nginx, namun masih error mas… saat homepage ga error pas post error 404 not found (webuzo).. permalink saya saat ini set seperti ini mas domain.com/%postname%/
gimana yah solusinya …. makasih banyak yah mas… maaf merepotkan.. hehe
Edit file
/usr/local/apps/nginx/etc/conf.d/webuzoVH.conf
Tambahkan kode
try_files $uri $uri/ /index.php?q=$uri&$args;
Setelah ditambahkan kode, nanti hasilnya kira2 seperti ini (sesuaikan nama domain-nya):
Save & restart nginx.
Cuma harus mau direpotin karena setiap tambah / hapus domain, kode yang ditambahkan akan hilang, jadi harus ulangi pekerjaan & re-create lagi.
Sekali lagi, jangan lupa restart nginx:
service nginx restart
Kalau setelah dijalankan saran saya tapi masih error, mohon maaf saya tidak tahu.
oiya mas sorry, baru bales lagi… hehehe.. maap maap..
iya sudah OKE bgt mas.. terima kasih mas 😀
Mas kalo yang sering mati PHPnya, gimana cara benerinnya. Sebenarnya sih PHPnya gak mau running. Jadi pas setting webuzonya selesai, PHPnya gak running. Saya pake nginx+mariadb+bind+php55.
Kalo saya biasanya dengan menghapus semua aplikasi dan menginstallnya kembali:
Setelah yakin semua di-uninstall, install kembali.
kalo mysql di webuzo nya kita remove (via tombol remove di panel webuzo) , bakal menghapus database nya gak yah?
Tidak mas. Aman, database tidak akan terhapus.
nih artikel yang sedang aku cari mas, wah bermanfaat bgt nih, matur suwun 😀
Mas saya punya blog nongkrong di DO, pake nginx php7 mariadb, RAM cuma 512, gak pake panel. Akhir2 ini blog saya kadang error database connection, tp setelah mariadb direstart normal lg, tp ini berlangsung sehari sekali kadang 2 hari sekali. Ini kenapa ya, klo mau liat error log mariadb pake perintah apa mas?
Coba pastikan Memory Swap nya ada, minimal 1GB.
Untuk error log MariaDB, misal MySQL / MariaDB server kenapa bisa mati, untuk OS Debian bisa dibaca di sini
/var/log/syslog
. Kalo distro lain saya kurang tahu.Kalo misal file di atas ngga ada, cek aja path nya dgn cara sbb.
Misal password mysql untuk user root adalah
123456
, jalankan 2 perintah di bawah beruturut-turut.Cek path nya di bagian Value, seperti di bawah ini
kalo sdh, keluar dengan perintah
exit
Hasilnya gini mas
MariaDB [(none)]> show global variables like ‘log_error’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| log_error | |
+—————+——-+
1 row in set (0.00 sec)
apa log error blm diaktifin ya?
Kemungkinan iya mas, belum di set, silahkan di edit
my.cnf
nya tambahkan kode di bawah[mysqld]
, misalnya kode nya beginilog_error = /var/log/mysql/error.log
Nanti kalo error mas bisa cek file
/var/log/mysql/error.log
nya.Atau siapa tau memang error nya mysql ada di
/var/log/syslog
jadi silahkan dipelajari, barangkali memang masuk ke situ. Karena kalo di Debian/Ubuntu secara default masuk ke situ.makasih mas infonya ntar saya ubek2 dulu sistemnya, btw klo pake os debian buat server/ blog itu ntar klo ada update gt ada pemberitahuan kayak di ubuntu kah? klo ubuntu kan klo login terminal misal ada update lsg ada pemberitahuan.
Tidak ada mas. Solusinya bisa pake
apticron
yang akan kirim notif ke email jika ada yang perlu update.oke mas, makasih pencerahannya, sangat membantu
oh ya memory swap udah ada 1GB sejak pertama build
ane coba buat croncjob, trus ane matiin service my sqlnya ta tungguin 2 menit kok gak idup2 ya???
Coba di cek apakah betul cronjob nya jalan, cek dengan menjalankan perintah ini
crontab -l
mas kalo di ubuntu gimana ya commandnya?
sama mas.
Pingback: Mengatasi Koneksi Database MySQL Sering terputus di WebuzoFawzya.Net
nah ini yang saya cari, saya kira kenapa mysql sering mati sampai gonta ganti control panel sama vps masih tetep saja… ternyata belum ada swap memorynya hehehehe
terima kasih bang hardinal… semoga semakin berkah
mantap mas, dulu saya pake webuzo. tapi sekarang tanpa panel. wkwk
sekarang pake openlitespeed + php + mariadb.. tapi mariadb juga kadang2 mati, tapi mampir ke blog ini. hehe..
Izin bookmark dulu ah.
Lg ada mslh di mysql yg sering mati juga nih. Smpt kpikiran set cron auto start mysql. Trnyt tutor disini lengkap.
Mantap artikelnya.
Pingback: Error Pada Codeigniter – Belajar bersama