Optimisasi WordPress di Server Traffic Tinggi
Ketika dulu IlmuKomputer.Com menggunakan html statis dan tanpa database, masalah traffic dan optimisasi server tidak terlalu terpikirkan. Masalah mulai muncul di awal Januari 2007, persisnya ketika saya putuskan IlmuKomputer.Com bermigrasi menggunakan CMS. CMS sudah saya pilih yang cukup ringan yaitu WordPress, disamping fiturnya pas terutama yang berhubungan dengan masalah sindikasi, tracking proses “creating new knowledge”, incoming/outcoming link, trackback dan pingback. Tapi ternyata ini tidak banyak menolong ketika seperti biasa 200.000 kunjungan harian (daily hits) membom server IlmuKomputer.Com. Server di datacenter Amrik ambrol dan ketika nekat nerusin hidup di suspended oleh serverhosternya
Kesempatan ini saya gunakan untuk sekalian pindah ke server di IIX, alhamdulillah beberapa rekan membantu nyumbang server dan bandwidth. Yang pertama mas Akbar Marwan (the phenomenon dari gundar) di datacenter Telkom-Jakarta, dan yang kedua mas Rizal di datacenter Bandung. Thanks untuk mas Akbar dan mas Rizal, Indonesia akan maju kalau banyak orang baik seperti anda berdua. Tapi ternyata kedua server ini ambrol juga. Server ngos-ngosan, hampir 2 hari sekali saya terpaksa bolak balik mindahin NS ke server yang hidup. Yang pasti bikin om Akbar dan om Anton sibuk berat, karena bantuin ngopeni IlmuKomputer.Com dan berkali kali mindahin backup tarbal ukuran besar Inilah mengapa IlmuKomputer.Com 2-3 minggu belakangan jarang bisa diakses dengan baik oleh rekan-rekan sekalian. Juga yang membuat ratusan email, SMS, dan message YM yang berupa komplen mampir ke laptop saya
Dari situ saya mulai mikir sepertinya sudah waktunya harus ngoprek dan mengoptimisasi server. Paling tidak ada 4 titik yang bisa dioptimisasi: Apache, MySQL, PHP dan WordPressnya sendiri. Saya pingin melakukan optimisasi di semua titik, hanya untuk ujicoba, saya coba dulu dari yang mudah. Dari yang saya lakukan di bawah, saya lihat sudah cukup signifikan membuat laju IlmuKomputer.Com menjadi cukup cepat. Ada beberapa hal lain yang sebenarnya masih pingin saya lakukan, cuman pingin sambil memonitor kondisi servernya. Thanks untuk mas Kemas yang meskipun baru balik berdjoeang di Asia Source II sudah berjibaku menemukan banyak resource tentang optimisasi WordPress.
1. OPTIMISASI MySQL
Ini awalnya Anton yang rajin ngoprek. Saya sendiri lihatnya karena yang down duluan selalu MySQL dan bukan Apachenya, jadi dari sini kita gerak. Optimisasi MySQL biasanya hanya terpusat di file /etc/my.cnf. Saya lihat yang cukup penting adalah setting variable max_connections, key_buffer dan table_cache. Setting variable lain selengkapnya seperti di bawah, beberapa nyontek dari tulisan yang ada di list referensi.
max_connections = 500
key_buffer = 256M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
myisam_sort_buffer_size = 64M
thread_cache = 8
query_cache_size = 512M
Sedangkan optimisasi table-table databasenya sendiri bisa menggunakan PhpMyadmin, khususnya fitur Optimize Table. Ada artikel menarik tentang ini di sini.
2. OPTIMISASI WORDPRESS dan PHP
Intinya saya pingin supaya tidak ada query ke database secara terus menerus di IlmuKomputer.Com. Bahasa gampangnya bagaimana membuat page yang dinamik dan banyak query ke database menjadi statik. Ini ternyata ada plugin WordPress yang bisa dipakai, namanya WP-Super-Cache. Instalasinya simple seperti plugin WordPress yang lain, dan ternyata efeknya cukup ampuh.
Teknik caching APC (Alternative PHP Cache) juga bisa digunakan. Berbeda dengan WP-Cache yang merupakan plugin WordPress, APC bisa digunakan untuk code PHP apapun karena dia perlu bermain-main langsung dengan setting php.ini
3. OPTIMISASI SCRIPT WORDPRESS
Optimasi bisa juga dilakukan ke script WordPress, misalnya dengan memperbaiki function call. Ini juga cukup menarik dilakukan, meskipun tidak se-ngefek pakai WP-Cache atau APC. Teknik ini tertulis lengkap di: http://elliottback.com/wp/archives/2006/07/27/optimizing-wordpress-performance-speed/
Teknik lain optimisasi script wordpress adalah dengan usaha mem-freeze pemanggilan $now, sehingga tidak terload berulang-ulang. Teknik ini efektif khususnya berhubungan dengan query post WordPress. Sudah ada pluginnya, bisa didownload dari http://txfx.net/code/wordpress/post-query-accelerator/ Instalasi juga sangat mudah karena tinggal upload ke /wp-content/plugins dan klik activate di menu administrasi WordPress.
4. OPTIMISASI APACHE
Optimisasi lengkap ada di http://httpd.apache.org/docs/1.3/misc/perf-tuning.html. Saya sendiri baru sempat ngoprek variable MaxClients, yang lainnya belum nyoba.
5. MIRRORING WORDPRESS
Jujur saja saya belum benar-benar paham teknik mirroring wordpress ke berbagai server. Hanya untuk mirroring wordpress dengan model P2P software, ternyata bisa pakai The Coral Content Distribution Network. Cukup menjanjikan, tapi sayangnya saya sendiri belum nyoba.
6. PENGGUNAAN SQUID
Mas Harry Sufehmi sudah menulis lengkap tentang penggunaan SQUID untuk server traffic tinggi di situsnya. Lengkap dengan implementasi untuk IlmuKomputer.Com
Yang saya tulis pasti banyak salah, karena core competence saja bukan di server tunning and optimization Tulung koreksi dan masukan dari rekan-rekan sekalian yang ahli di bidang ini. Itu dulu, maturnuwun atas perhatiannya, saya akan “kembali ke laptop” dulu.
REFERENSI:
Hihi, WordPress itu ga termasuk CMS ringan loh mas :). Kalo ga salah ada kok front end untuk “meringankan” beban kerja server kalau memang masih ingin pake WordPress, LightPress gitu ya namanya? Jadi dia engga setiap ada inquiry ngambil dari database lagi, semuanya di cache
Server anda spesifikasinya apa sih?
a. OS and version?
b. CPU type, number of CPU?
c. RAM size?
d. Underlying storage pakai apa? RAID or not?
Untuk optimasi terhadap trafik tinggi yang paling utama adalah prinsip kalau bisa statis jangan dinamis. Separasi content dinamis dan statis akan bisa membantu proses optimasi.
Ini jurus utama yang sering dilupakan orang.
Sebetulnya WordPress itu termasuk “berat” bukan ringan. Query nya ke database termasuk banyak dan “berat”. Ternyata terbukti di kasus mas Romi yaa, yang KO selaly MySQL duluan.
Makanya webhoster saya selalu rajin mengingatkan “idupin plugin wp-cache euy”, he he
Seingat saya, ada yang sudah membuat versi “ringan” dari WordPress, tapi saya lupa URL nya. Nanti saya coba cari-cari lagi deh.
Penasaran output top di server IKC sekarang seperti apa
Ah ini dia; Lightpress.
Download dari sini. HTH
#1 setuju pakdhe. toh updatenya tdk perlu realtime. teknik sederhana yg hasilnya ruar biasa. thttpd untuk static page
# mas Harry, mas Oscar: yup benar lightpress bisa digunakan, hanya banyak template dan plugin WP yang nggak bisa jalan disitu. Ini sedikit masalah
# mas Dedhi: sepertinya sumbangan dari om Akbar cukup ampuh, Intel XeonCPU 3.20GHz, RAM 1GB, HDD 200GB, CentOS with cPanel.
# mbah IMW: yup bener bos, yang paling kerasa memang setelah WP-Cachenya dimainin
hmm…coba deh di upload2in ke
http://www.indoupload.net/
“Indoupload menyediakan layanan upload dan penyimpanan data untuk pengguna internet Indonesia, dengan ukuran file maksimal 100MB dan ruang 500MB bagi pengguna terdaftar. Jangan lupa share folder anda agar dapat diakses oleh pengguna lain”
http://gudangupload.com
“Situs ini adalah online storage yang bertujuan untuk memberi kemudahan bagi pengguna Internet dalam berbagi file, terutama file-file yang berukuran besar, dengan sesama pengguna Internet lainnya. Situs ini dapat dimanfaatkan oleh siapa saja tanpa dipungut biaya apapun. Setiap pengguna yang mendaftarkan diri di situs ini diberi quota sebesar 1 GB untuk menyimpan file-filenya. Selamat mencoba, semoga bermanfaat..”
yaa biar enteng..hehe kali aja adminya mau kerjasama! heheh
oia buat hiburan
http://indoupload.net/public/1075/tukulkasarung.jpg
hauhau…Wong Ndeso..” tak soek-soek”
http://www.chip.co.id/forum/showthread.php?t=54081
Satu hal yang saya lakukan biasanya, menghitung dulu seberapa sering frekuensi update dari suatu content. Dari sini bisa ditimbang-timbang apa memang perlu total dinamis, atau statis
Lha kalo 1 hari diudpate cuma 3 kali buat apa bikin dinamis sepenuhnya kekekkee
Kalau IlmuKomputer.Com dalam satu hari updating cukup banyak frekuensinya mbah. Registrasi, modifikasi artikel, uploading file, comments, post message, dsb. Ini yang bikin nggak bisa total statis
Justru itu pentingnya melakukan analisis frekuensi update dari content. Jadi bisa melakukan separasi dengan enak.
Bravo ilmukomputer.com semoga semakin kenceng, semakin banyak ebooknya, aku banyak belajar dari ilmukomputer, tanpa ilmukompuer jadi apa ya aku di kampus dan kerjaan.
by
http://www.darminto.web.id
Moga-moga sekarang dah normal lagi setelah dioptimasi servernya.
Sayangnya masih naik turun juga nih server …hehehe
siiippp…. coba ah!!!
Mas Romi,
Antara web server dan database server yang mas Romi pakai untuk hosting ilmukomputer.com itu dijadikan satu atau dipisah?
Salam
# mas Bayu, saat ini masih jadi satu. Sekali lagi saya perlu pencerahan bagaimana mirroring/load balancing yang baik khusus untuk WP. Karena interaktifitas user harus tetap ada, proses replikasi juga berjalan dengan baik, kalau langsung hantam dipisah-pisah, replikasinya bisa puyeng. Ada ide ?
Wah iya ya, saya baru sadar kalau server IKC masih bermasalah juga. Pak Romi, sudah sempat coba main-main dengan MySQL Query Cache ?
query_cache_size = 32M mungkin terlalu kecil untuk situs selevel IKC. Kepastiannya bisa didapatkan dengan memonitor output “SHOW STATUS LIKE ‘%qcache%’;” secara rutin.
Dari pengalaman MySpace, situs dinamis memang paling berat bebannya di database. Salah satu solusi yang paling efektif yang mereka implementasikan adalah database cache.
Mungkin malah perlu upgrade memory server, tapi tidak apa saya kira daripada (misalnya) menambah server, atau oprek2 code WP (sehingga menjadi custom, dan susah untuk upgrade saban ada versi barunya)
Bahan rujukan yang sangat menarik untuk topik ini adalah MySQL Performance Blog
Kalau sudah di optimize dan tetap berat juga bebannya, maka bisa coba pakai squid. Saya pernah implementasi infrastruktur dengan 3 web server dan 1 (huge) db server, dan masih kelabakan. Maka saya pasang 1 squid server di “depan”, dan beban kerjanya drop cukup drastis.
Mohon maaf kalau ternyata sudah mencoba ini semua. btw; kalau dirasa diperlukan, saya bersedia mencoba untuk meng optimize server IKC. Just let me know.
Great om, thanks banget, nanti aku kontak japri yah. Minta tolong dilihat lihat sekalian query_cache_size dah aku naikin. Squid belum nyoba.
Wah sip, sekarang sudah lebih lancar dibukanya anyway, kalau di masa depan bermasalah lagi, masih ada satu kartu as lagi di tangan (implementasi squid).
Moga makin sukses terus.
iya, saya ngakses dari malaysia ikc susah banget dibukanya pak, perlu perjuangan, kadang postingan saya menampilkan pesan error dari cache nya, tips ini keren banget.
udah nyoba sistem clustering belum ya, ya setidaknya ga harus pake spek server keren, pembagian tugas dengan menggunakan beberapa komputer pentium 3 sepertinya dah cukup … CMIIW
Lama nggak sowan.. baru tahu yang terjadi. BTW mohon maaf mas Romi. bila saat itu saya termasuk nanyain mas Romi via ym..
Btw.. diilanginnya list penulis apa juga karena alasan yang sama?
Apapun itu.. i’ts great job… luar biasa.. saya yakin usaha mas Romi dan teman-teman sangat berguna buat jutaan warga Indonesia.
# ahmaddani: ya gitulah mas ceritanya. FYI, malam ini barusan aku pindah lagi ke server baru, masih di datacenter Telkom Jakarta, bantuan om Akbar (Gundar, Techscape). Thanks dukungannya
# Hendito: punya studi kasus clusterring system untuk CMS WP?
#Raffael: yap WP-Cache nya kadang ngasih warning, cuman nggak error kok itu, hanya warning saja, upload dan post tetap masuk
tambahan : http://www.arnebrachhold.de/2007/02/16/four-plus-one-ways-to-speed-up-the-performance-of-wordpress-with-caching
wew
jadi penasaran kek gimana ngehandle server traffic tinggi
sayangnya hosting ku malah ngomong blm perlu ngegunain wp-cache kalo masih dalam taraf update kecil per hari
good luck deh buat IKC
moga makin bandel
mungkin beberapa teknik optimasi mysql dan apache dari mixi.jp bisa “dicontek”
http://conferences.oreillynet.com/presentations/mysql06/mixi_update.pdf
# Dikshie: lagi tak baca-baca om, eh gimana kabar? Di Jepang banyak ketemu anak-anak tho … salam untuk mereka yo
Sekedar mengusulkan solusi lain untuk dipertimbangkan, yakni menggunakan Drupal sebagai CMS-nya. Mengingat Drupal memiliki fitur auto-throttle yang dapat mendeteksi otomatis dan mengontrol lalu lintas yang masuk ke sebuah situs web.
Info lebih lanjut bisa dibaca di sini:
http://drupal.org/handbook/modules/throttle
Walau mungkin usulan ini tidak membantu terlalu banyak, atau bisa jadi ditolak, tapi saya akan mencoba mencari cara untuk mengkonversikan isi WP ke Drupal. Murni didasarkan keingintahuan saja dan bereksperimen.
Mas Romi, boleh tahu konfigurasi Apache dan PHP? soalnya WP saya sering warning “File not found”, kalau isian di FORM cukup banyak. Sukron
@Kemas – Throotle
Saya pikir throottle bisa diimplementasikan pada WP. Silahkan jajal plugin ini.
Ya, mas Romi, sepertinya saran dari mas Hendito bisa dipakai. Mungkin mengunakan sistem LVS bisa membantu? Secara teori sih kayaknya lebih efective karena banyak server yang menghandle client dengan computer yang memiliki spac yang cukup tinggi.
mohon dikoreksi dengan computer yang memiliki spac yang tidak terlalu tinggi.
Dulu website saya http://www.liveconnector.com/ sempat mengalami masalah ini, apache&mysql di satu server, spec server saya pada saat itu masih Pentium 4(2,8) RAM 1GB, HD 80GB harus menangani ribuan visitor /harinya, mungkin solusi saya salah satunya dapat membantu mas Romi,:
1). lihat proses yg aktif di mysql berulang2 (show processlist;) jika banyak bgt command yg sleep kira 40-100 coba bikin cronjob setiap 1 menit jalankan perintah php:
set_time_limit(0);
$result=mysql_query(show processlist);
while ($row=mysql_fetch_array($result))
{
$process_id=$row[Id];
if (($row[Time] > 10 ) && ($row[Command]==Sleep) )
{
//print $row[Id];
$sql=kill $process_id;
mysql_query($sql);
}
}
skrip diatas nyari proses yg tidur lebih dari 10 detik, kemudian di bunuh prosesnya karena ga guna lagi.
Setelah saya jalankan cara ini, performance bener2 terasa walaupun masih aga lemot
2). lihat lagi proses yg aktif di mysql berulang2 (show processlist, jika ada status seperti (copying to tmp table, using filesort, etc) itu biasanya kalau banyak akan membuat server aga lambat, saran saya: akalin index2nya misal SELECT * FROM users WHERE firstname=’fariz’ ORDER BY `date` DESC kalau kita bikin index di firstname_date proses ini akan sangat cepat.
Saya memang belum coba wp, tapi ga ada salahnya kita oprek2 script php saat dia manggil mysql, atau rubah2 index via phpmyadmin. Forum saya http://www.liveconnector.com/forum/ itu phpbb2, awalnya lambat bgt, sampai2 forum hanya saya buka pukul 19:00 s/d 09:00, akirnya saya coba (show processlist;) berulang2, proses apasih yg bikin lambat? setelah ketemu mari kita coba query tersebut dgn EXPLAIN, gimana sih cara dia ngambil datanya? segera optimasi yaitu apakah index table sudah ok? koq pake kopi ke temporary dulu, apakah cara panggil querynya sudah ok? dsb
3). Walaupun kata apache keepalive on lebih cepat, tapi setelah saya coba off ternyata justru jauh lebih cepat .
4). coba mysql_connect() daripada mysql_pconnect()
dulu saya pake mysql_pconnect() soalnya katanya lebih cepat, tapi kenyataannya sering error (too many connection) akirnya saya pake mysql_connect() aja
sebelum saya jalankan 4 cara diatas, kalau di top mysql cpu usage berkisar antara 60-100% sehingga client2 musti tunggu lama bgt baru masuk. tapi setelah saya jalankan 4 cara diatas proses mysql berkisar antara 0-30% di pentium 4 dgn >100 query/detik
Mudah2an dapat membantu, mohon kabarnya ya kalau salah satu atau lebih cara diatas berhasil.
Sempet baca – baca di internet tapi (maaf) lupa linknya, tapi yang jelas di salah satu post dari codex.wordpress.com, dibilang : “WordPress itu akan sangat bagus dan memang sangat bagus jika dipakai dengan benar, yaitu sebagai Blog.” Apakah ini memang masalahnya? Saya sendiri juga cenderung menghindari WP untuk portal (asumsi saya IKC adalah portal). Walaupun belum berhasil menghindarinya (habis WP enak banget dicostumize, buat layout, maupun mainin content-nya).
Apakah pernah dipertimbangkan untuk berpindah ke CMS lainnya Mas?
Halo mas Romy, salam kenal :).
Untuk web dengan content dan pengunjung yang banyak WP memang tidak cocok, apakah ada alasan khusus knapa mas Romy pada awalnya menggunakan WP untuk IKC?
Mungkin mas Romy bisa mencoba menggunakan Drupal sebagai CMS untuk IKC. Untuk theme, pembuatan theme Drupal menurut saya lebih mudah dari pada WP, fitur cachingnya bagus sekali, punya kemampuan untuk membuat tipe content sesuai keinginan kita, forum, blog, SEF, bisa menambahkan field baru di halaman profil user tanpa module tambahan, dll :).
Maaf kelupaan, sekarang sudah ada module untuk migrate dari Wordpres ke Drupal, namanya WP2Drupal.
http://drupal.org/node/69706
# Tom-182: Thanks. “tidak cocok” kira-kira berimplikasi kemana yah? Alasan menggunakan WP, requirement dari IlmuKomputer.Com cocok, jadi justru karena cocok saya pakai Saya masih belum menemukan alasan valid untuk move ke cms lain
@ Romy
Kalau dari artikel2 yang saya baca di internet, WP memang bagus banget untuk blog engine, namun WP tidak cocok jika digunakan pada web dengan artikel dan pengunjung yang bejibun karena “katanya” akan memakan resource MySQL yang sangat besar sekali.
Beberapa kenalan saya yang menggunakan WP sebagai platform web mereka berkali-kali “diusir dengan halus” oleh pihak web host karena web mereka memakan resource yang sangat besar pada sisi server :).
# Tom-182: Ada referensi artikelnya? Diskusi saya lanjutkan, kenapa memakan resource yang besar? Please, jangan pakai argumentasi “katanya” give me the reason …
Kok link yang saya kasih ga keluar di komentar ya? Apa blom di approve kah?
solusi squid sbg http accelerator oleh mas harry sufehmi sudah benar, cuma kalau squid dirasa tdk efisien dan boros memory (mengahabiskan resources) silahkan coba varnish cache reverse proxy (http accelerator).
http://varnish.projects.linpro.no/
pengembang varnish mengklaim utk urusan http accelerator varnish ini katanya terbaik & jauh mengungguli squid :-))
selamat bereksperimen.
@Fariz – komentarnya menarik sekali :
Betul sekali; kalau jumlah proses Apache cuma sedikit dan apalagi kalau banyak visitor kita yang koneksi Internetnya lambat; ini memang justru akan memperparah performa website kita.
Optimisasi Apache memang cenderung harus disesuaikan dengan karakteristik website dan pengunjung website ybs.
betul, lagipula “cost” koneksi ke MySQL itu termasuk “murah”.
Berbeda dengan misalnya Oracle, dimana menggunakan persistent connection dapat meningkatkan performa database (dan, tentu saja, website ybs) secara cukup signifikan.
ass. wr.wb.
mas romi , saya saat ini sedang short course di monash uni di melbourne dalam waktu 4 bulan. saat ini saya sedang menunggu detik2 terakhir kami balik ke indo .Sedangkan saya 2 minggu terakhir sudah akan balik ke indo mas . kebetulan aku dapat situs di internet yang menyediakan seluruh file yang aku butuhkan dan free . sayangnya aku mau donwload file dari sehari cuma di batasi 50 kali download, padahal jatah bandwidth saya masih 18 Giga pakai adsl2+ . bagaimana cara saya agar saya dapat download lebih dari 50 kali mas .
trims sebelumnya.
wassalam
anas
Mas Romi,
Dari pilihan cache yang anda sebut kan diatas, manakah yang paling memberikan efek yg paling baik? Apakah menggunakan WP plugin, APC atau squid? Apakah squid diletakkan di server yang sama dengan apache atau terpisah?
Terima Kasih sebelumnya
semoga bisa berjalan dengan baik
jadi aku bisa update knowledge lagi
Mas Romi….
Semoga Usahanya SUKSES..
dari apa yang saya baca barusan, barulah saya mengerti kenapa website ilmukomputer.com sulit diakses. kalaupun masuk, pastinya menunggu lama sekali…. Padahal ilmukomputer.com adalah sumber belajar saya selama ini.
Mas.. kalo saya pikir kayaknya masalah content juga perlu diperhatikan. Kebanyakan konten di Ilmu Komputer merupakan file yang harus di download. Kenapa tidak memindahkan langsung konten yang kebanyakan PDF ke kontent text dan disimpan di database? Mungkin kebanyakan pemilik artikel tidak sempat memindahkan ke posting wordpress sehingga langsung upload artikel karena lebih cepat. Tapi proses download dari server membuat koneksi ke server banyak yang ngegantung dan terus idup selama download. Klo perlu antar server download file dan server konten dipisahkan sehingga proses download tidak mengganggu user yang ingin sekedar melihat-lihat konten teks.
W mo nanya pa plugin itu berbahaya jika ada yang salah tuk nggunainnya bagi webset .
terimakasih
irawan