Category:Web Server

From CBNCloud-Wiki
Jump to: navigation, search

Apache Server Status

Apache Server Status for Localhost.jpeg


* Perhatikan yg diberi angka merah

[1] 9.31 requests/sec vs 3 request currently processed

     Kondisi ini artinya normal, dimana average 9.3 req/sec, dan saat dicapture sedang memproses 3 request.
     Jika ada x req/sec dan y req currently processed, dimana y jauh lebih besar daripada x, maka sudah harus waspada,
     memory leak dan/atau apache child processes hung up sudah mulai menumpuk.

[2] Perhatikan yg diberi tanda "W", jika kondisi y jauh lebih besar > x, biasanya akan menumpuk banyak "W".

     Jika halaman ini kita refresh (F5), server yg normal maka "W" akan berganti2 menjadi _/./dll
     Jika ada banyak W yg selalu tetap W meski direfresh berkali maka sudah hampir pasti itu adalah slot child process
     yg bermasalah.

[3] Perhatikan kolom PID dan Request (ujung kanan).

     Korelasi dengan no [2] diatas, pada saat direfresh (F5) berkali2, dan isi dari kolom Request masih sama terus,
     artinya itulah 1 slot process yg bisa kita investigate lebih lanjut.
     Catat/copy paste PID-nya, ini berguna untuk keperluan trace di server.

Didalam console ssh server bersangkutan, lakukan:

prompt> strace -p pid

httpd process yg normal suatu saat akan terminated/closed,atau kalau process sering dipakai/connected, terlihat akan tampil banyak process2 kernel threads yg berbeda2, artinya dia sedang melayani banyak request dari client.

sedangkan httpd process yg tidak normal, akan terlihat locked dalam infinite loop,dengan beberapa verbose message. biasanya ada melibatkan gettimeofday dan syscall2 lainnya.

nah, khusus untuk kasus ini, akan terlihat syscall futex diulang berkali2, dan most likely menjadi penyebab child process ini tidak bisa dikill/terminated oleh parent process.

hasil observasi beberapa hari terakhir, futex_wait menunggu suatu value tertentu agar bisa closed. reason lebih dalam utk hal ini rasanya tidak perlu dicari lagi, cukup kita ketahui bahwa ada masalah futex oleh apache child process.

2. Penyebab

- Dari sisi os, hal ini terjadi di cross platform, ubuntu, centos, dll, jadi bukan faktor os.
- Dari sisi apache, hal ini terjadi di berbagai versi apache.
- Dari sisi mod2 dalam apache, hasil riset dan tracing di tiap server, beberapa mod yg
  diduga mentrigger deadlock ini antara lain: mod_perl dan mod_pagespeed

Apache, futex, dan mod2 lainnya bukanlah suatu kombinasi buruk. Root problemnya sebenarnya adalah, web app tersebut, dengan catatan penting, ada command2 pada web app yg most likely bisa memancing deadlock terjadi. Command2 ini sebenarnya legitimate, seperti sleep(x), dan lain2, yg memanfaatkan infinite loop algoritma, dan sleep for x nanosecs utk repeat. Jadi kita tidak bisa pointing finger bahwa A yg salah, B benar, C salah, dll. Bug ini terjadi kebetulan dengan komponen2 tersebut diatas.

Jadi kita dihadapkan pada pilihan sulit, tidak mungkin meminta user stop memakai beberapa syscall pada php, karena itu legit. Merombak futex pun tidak mungkin, meski beberapa engineer di luar sana sudah mulai mengoprek2.

3. Solusi

Tidak mungkin mematikan mod_perl, sebab ini juga sering dianggap "standard" instalasi.
Tidak mungkin mendisable syscall2 default bawaan php.
Satu2nya cara dengan mendisable mod_pagespeed, yg juga heavy dalam interlocking linux threads.

4. Konsekuensi

Tidak ada lagi peran backend cache dalam minifikasi html resources, setidaknya masih ada eaccelerator utk php script cache.
Catatan: eaccelerator jg menggunakan locking yaitu spinlock, tapi aman dari kondisi bug ini.

5. Possible workaround.

Harus menunggu release berikut dari pagespeed, apache, php, dll agar tidak lagi deadlock.

6. Implementasi

Kemarin malam, semua web server LCTeCo dan LC_Tribun sudah saya disable pagespeednya. 
Silakan lanjut pada cluster lainnya, seperti LC_Daerah dll.

7. Relasi terhadap setting httpd.conf

Beberapa hari lalu sempat saya request perubahan setting MaxRequestPerChild.
Angka ini menandakan upper limit bagi suati spawned httpd process utk keep process request.
Setelah melewati angka ini maka child process tersebut harus diterminasi.
Nah, jika angka ini terlalu besar, dan berbenturan dengan bug ini, yg terjadi server akan sangat berat.

Untuk kondisi normal, angka yg terlalu kecil akan menaikkan load cpu, sebab destroy/create child process akan butuh cpu load. Semakin lama child dikeep alive, semakin sedikit overhead di cpu. Tapi jika child terlalu lama dikeep, sangat prone to memory leak, dan possibly memancing bug seperti kasus ini. Analoginya, semakin cepat/sering dikill, agar tidak terlanjur memancing bug spawned pada child tersebut. Tapi semakin sering sibuk kill/create process, cpu makin tinggi load dipake utk manage hal2 internal seperti ini, instead dipake utk process request dari client browser.


Setting Apache dari WHM

Untuk melakukan penambahan module Apache melalui WHM, berikut langkah-langkahnya:

1. Klik Software pada tampilan utama WHM.
2. Klik EasyApache (Apache Update)
3. Pada tampilan awal, anda dapat menentukan profile PHP yang ingin di instal. 
4. Kemudian anda dapat memilih Build Profile Now untuk langsung mengeksekusi profile yang sudah dipilih atau 
   Start Customizing Based on Profile untuk mengedit perubahan pada setting profile yang sudah dipilih.
   Jika anda memilih Start Customizing Based on Profile, tampilan berikutnya adalah menampilkan beberapa versi 
   Apache yang dapat digunakan. 
5. Klik Next Step untuk melakukan konfigurasi selanjutnya. Pada opsi PHP version, anda dapat memilih versi PHP yang sesuai 
   dengan kebutuhan anda. 
6. Kemudian klik Next Step.
7. Pada opsi Short Options List, anda dapat memilih plugin yang ingin di instal. 
8. Klik Save and Build untuk melakukan restart Apache atau pilih Exhaustive Options List untuk melakukan konfigurasi selanjutnya, 
   yaitu mengedit beberapa module PHP yang akan diinstal.
9. Centang modul-modul yang ingin digunakan kemudian klik Save Only jika hanya ingin menyimpan konfigurasi tersebut tanpa melakukan
   instalasi dari modul yang sudah dipilih sebelumnya.
10. Klik Save and Build untuk melakukan perubahan sesuai dengan setting yang telah dilakukan sebelumnya.
11. Tunggu beberapa saat sampai proses Build Apache selesai.


Upgrade versi PHP dan/atau Apache pada WHM

1. Masuk ke URL WHM dan login sebagai root.

2. Masuk ke menu Easy Apache: Main >> Software >> EasyApache (Apache Update)

Easyapache1a.jpg

Dan klik "Start customizing based on profile".

Easyapache1b.jpg

3. Apache Version Silahkan pilih versi Apache yang diinginkan dan klik "Next Step".

Easyapache2.jpg

4. PHP Version Silahkan pilih versi PHP yang diinginkan dan klik "Next Step".

Easyapache3a.jpg

Easyapache3b.jpg

5. Short Options List Silahkan pilih module-module yang akan digunakan dalam pemograman PHP.

Easyapache4.jpg

6. Exhaustive Options List Silahkan pilih spesifik pilihan pada Built-in module Apache.

Easyapache5.jpg

7. Jika sudah diselesaikan semua, maka klik "Save and Build".

8. Proses building ulang package Apache dan PHP. Selama proses dilarang untuk menghentikan ditengah jalan atau service apache akan crash. Proses ini berjalan beberapa puluh menit tergantung load server saat itu.

Easyapache6.jpg

9. Proses building selesai dilakukan.

Easyapache7.jpg

This category currently contains no pages or media.