How to speed up Public Access to Your Joomla Portal

Tips ni hanya untuk pengguna Linux sahaja.
OS : CentOS 5.x / RHEL 5.3
Web Server : Apache 2.x
Database Server : MySQL 5.x
Web Application : Joomla
Number of  VHOST : 18

Aku cari dan try2 juga bermacam kaedah untuk tune web server sebab bukan semuanya disebabkan oleh RAM dan CPU perlu naiktaraf sahaja. Ada banyak punca lain yang boleh dibuat untuk melaksanakannya.

Kebanyakan kita memang selalu gunakan saja apa yang default konfigurasi pada servis yang digunakan di server. Tanggapan itu ok bagi small web application, tapi kalau untuk pelaksanaan web application yang besar atau mempunyai banyak host, anda perlu tune server tu untuk menepati kapasiti yang diperlukan.

Langkahnya :

Load balancing on services tuning :
1) Pecahkan database server dan application server ke dalam server yang berbeza
- untuk mengurangkan load server apabila pelbagai host melaksanakan proses menggunakan apache dan mysql bagi melayan permintaan pengguna luar pada masa yang sama dan dalam satu server sahaja. Jadi elok dipecahkan kedua-duanya ni.
Security Tuning :
2) Langkah2 tuning keselamatan perlulah dilaksanakan di kedua-dua server tersebut mengikut kaedah yang ada aku terangkan dalam artikel terdahulu.

OS Tuning :
3) Tetapkan share memory OS agar mampu untuk tampung pengguna yang ramai kepada server pada satu-satu masa. Buka file /etc/sysctl.conf

-------------------------------------------------------------------------------------------------
#Jika share memory ditetapkan adalah 512MB
kernel.shmall = 536870912
kernel.shmmax = 536870912
fs.file-max = 16384
-------------------------------------------------------------------------------------------------

MySQL tuning :
4) Laksana tuning pada server mysql. Buka fail /etc/my.cnf
Konfigurasi untuk huge server (mempunyai banyak database dan bersaiz besar). Sesuai untuk jumlah pengguna yang akses ke server tersebut > 200 pada satu-satu masa.
-------------------------------------------------------------------------------------------------
[mysqld]
key_buffer = 64M
sort_buffer = 1M
join_buffer = 1M
max_allowed_packet = 8M
max_heap_table_size = 16M
table_cache = 1024
sort_buffer_size = 8M
read_buffer_size = 1M
read_rnd_buffer_size = 768K
myisam_sort_buffer_size = 48M
thread_cache_size = 512
query_cache_type = 1
query_cache_limit = 4M
query_cache_size = 64M
tmp_table_size = 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 4

max_write_lock_count = 1
#To force MySQL to temporarily elevate the priority of all SELECT statements that are waiting for a table after a specific number of inserts to the table occur. This allows READ locks after a certain number of WRITE locks.

low_priority_updates = 1

[isamchk]
key_buffer = 64M
sort_buffer = 64M
read_buffer = 16M
write_buffer = 16M

[myisamchk]
key_buffer = 64M
sort_buffer = 64M
read_buffer = 16M
write_buffer = 16M
------------------------------------------------------------------------------------------------

Apache tuning :
5) Ada tips suh guna php fastcgi...ianya sebenarnya sama macam apache module juga. Cuma banyak sangat perubahan kena buat jadi aku tak berani dan tanak amik risiko. Lagipun ada yang dah guna dan uji sebenarnya antara guna apache module dan php fastcgi tu perbezaannya tak ketara. Hanya sikit peningkatan apabila gunakan PHP fastcgi. So aku amik keputusan gunakan memcached untuk improve performance server tu. Memcached sesuai untuk web server dinamik, yang mana data dipaparkan disimpan dalam database.

Dalam Apache ada 2 jenis module prefork dan module worker. By default module prefork di tetapkan pada server apache. Module prefork digunakan untuk server unix yang mempunyai single atau duo processor. Manakala jika server menggunakan multi processor, maka elok guna module worker yang dikhususkan untuk handle multi thread.


Install memcached dahulu :
# yum install memcached

Ubah fail /etc/sysconfig/memcached seperti berikut :

PORT="11211"
USER="nobody"
MAXCONN="1024"
CACHESIZE="256"
OPTIONS=""

Install PHP memcache.so :
# yum install php-memcache

Enablekan/tambahkan di dalam fail /etc/php.ini :

extension=memcache.so

Restart httpd

Overall tuning :
6) Restart server tu lepas semua di atas siap dilaksanakan.
# shutdown -r now

InsyaAllah berjaya, sebelum ni untuk akses ke server joomla amik masa dalam dekat 1 minit lebih untuk keluarkan paparan main page. Tapi lepas laksanakan kaedah ni ia menurun kepada <15 saat sahaja untuk paparkannya.

~ Be a Creator Not a User ~

Ulasan