Difference between revisions of "Apache: Mengatasi Overload"
Onnowpurbo (talk | contribs) (New page: Sumber: http://goodmanemail.com/apache-setup.html Setting Apache web server up on linux to handle overload/'digg effect' more gracefully The problem: All default apache installations I h...) |
Onnowpurbo (talk | contribs) |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Sumber: http://goodmanemail.com/apache-setup.html | Sumber: http://goodmanemail.com/apache-setup.html | ||
− | |||
− | |||
− | + | ==Masalah== | |
− | |||
− | + | Konfigurasi default [[apache]] mengijinkan banyak sekali process jika banyak traffic. Memory mungkin aman-aman saja. Yang akan menjadi masalah adalah cputime, mungkin setiap request akan memperoleh 0.3-5% cputime saja. Akibatnya, proses menjadi terlalu lama sehingga menyebabkan timeout, refresh dan bahkan menambah banyak beban. | |
− | |||
− | + | ==Solusi== | |
− | + | Solusinya adalah membatasi apache threads menjadi sangat sedikit (misalnya 16 atau kurang). Artinya, setiap request menjadi memperoleh lebih banyak cpu time. | |
− | + | ==Implementasi== | |
+ | |||
+ | Edit file konfigurasi apache, kemungkinan di | ||
+ | |||
+ | /etc/apache2/apache2.conf -- Ubuntu | ||
+ | /etc/httpd/conf/httpd.conf -- CentOS | ||
+ | |||
+ | Turunkan semua nilai sebanyak mungkin. | ||
+ | Naikan nilai MaxRequestsPerChild. Contoh sebagai berikut, | ||
<IfModule prefork.c> | <IfModule prefork.c> | ||
Line 25: | Line 29: | ||
</IfModule> | </IfModule> | ||
− | |||
− | + | Contoh lain dengan mengecilkan semua parameter seperti berikut | |
+ | |||
+ | <IfModule mpm_prefork_module> | ||
+ | StartServers 5 | ||
+ | MinSpareServers 5 | ||
+ | MaxSpareServers 10 | ||
+ | MaxClients 256 | ||
+ | MaxRequestsPerChild 0 | ||
+ | </IfModule> | ||
+ | |||
+ | <IfModule mpm_worker_module> | ||
+ | StartServers 2 | ||
+ | MinSpareThreads 20 | ||
+ | MaxSpareThreads 60 | ||
+ | ThreadLimit 16 | ||
+ | ThreadsPerChild 5 | ||
+ | MaxClients 256 | ||
+ | MaxRequestsPerChild 0 | ||
+ | </IfModule> | ||
+ | |||
+ | <IfModule mpm_event_module> | ||
+ | StartServers 2 | ||
+ | MaxClients 256 | ||
+ | MinSpareThreads 20 | ||
+ | MaxSpareThreads 60 | ||
+ | ThreadLimit 16 | ||
+ | ThreadsPerChild 5 | ||
+ | MaxRequestsPerChild 0 | ||
+ | </IfModule> | ||
+ | |||
− | + | ==Saran Lain== | |
+ | Beberapa kondisi overload mungkin juga tidak mungkin ditangani menggunakan teknik di atas. Untuk itu mungkin ada baiknya menggunakan http accelerator atau squid yang dikonfigurasi sebagai reverse proxy. | ||
Latest revision as of 05:21, 20 April 2011
Sumber: http://goodmanemail.com/apache-setup.html
Masalah
Konfigurasi default apache mengijinkan banyak sekali process jika banyak traffic. Memory mungkin aman-aman saja. Yang akan menjadi masalah adalah cputime, mungkin setiap request akan memperoleh 0.3-5% cputime saja. Akibatnya, proses menjadi terlalu lama sehingga menyebabkan timeout, refresh dan bahkan menambah banyak beban.
Solusi
Solusinya adalah membatasi apache threads menjadi sangat sedikit (misalnya 16 atau kurang). Artinya, setiap request menjadi memperoleh lebih banyak cpu time.
Implementasi
Edit file konfigurasi apache, kemungkinan di
/etc/apache2/apache2.conf -- Ubuntu /etc/httpd/conf/httpd.conf -- CentOS
Turunkan semua nilai sebanyak mungkin. Naikan nilai MaxRequestsPerChild. Contoh sebagai berikut,
<IfModule prefork.c> StartServers 2 MinSpareServers 3 MaxSpareServers 5 ServerLimit 16 MaxClients 16 MaxRequestsPerChild 400000 </IfModule>
Contoh lain dengan mengecilkan semua parameter seperti berikut
<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 256 MaxRequestsPerChild 0 </IfModule>
<IfModule mpm_worker_module> StartServers 2 MinSpareThreads 20 MaxSpareThreads 60 ThreadLimit 16 ThreadsPerChild 5 MaxClients 256 MaxRequestsPerChild 0 </IfModule>
<IfModule mpm_event_module> StartServers 2 MaxClients 256 MinSpareThreads 20 MaxSpareThreads 60 ThreadLimit 16 ThreadsPerChild 5 MaxRequestsPerChild 0 </IfModule>
Saran Lain
Beberapa kondisi overload mungkin juga tidak mungkin ditangani menggunakan teknik di atas. Untuk itu mungkin ada baiknya menggunakan http accelerator atau squid yang dikonfigurasi sebagai reverse proxy.