Kami memiliki server web apache di depan Tomcat yang dihosting di EC2, tipe instance lebih besar dengan memori 34GB.
Aplikasi kami berurusan dengan banyak layanan web eksternal dan kami memiliki layanan web eksternal yang sangat buruk yang membutuhkan waktu hampir 300 detik untuk menanggapi permintaan selama jam sibuk.
Selama jam sibuk server tersedak di sekitar 300 proses httpd. ps-id | grep httpd | wc -l = 300
Saya telah mencari di Google dan menemukan banyak saran tetapi sepertinya tidak ada yang berhasil .. berikut adalah beberapa konfigurasi yang telah saya lakukan yang diambil langsung dari sumber daya online.
Saya telah meningkatkan batas koneksi maks dan maks klien di apache dan kucing jantan. berikut adalah detail konfigurasi:
// apache
<IfModule prefork.c>
StartServers 100
MinSpareServers 10
MaxSpareServers 10
ServerLimit 50000
MaxClients 50000
MaxRequestsPerChild 2000
</IfModule>
//kucing jantan
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="600000"
redirectPort="8443"
enableLookups="false" maxThreads="1500"
compressableMimeType="text/html,text/xml,text/plain,text/css,application/x-javascript,text/vnd.wap.wml,text/vnd.wap.wmlscript,application/xhtml+xml,application/xml-dtd,application/xslt+xml"
compression="on"/>
//Sysctl.conf
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
fs.file-max = 5049800
vm.min_free_kbytes = 204800
vm.page-cluster = 20
vm.swappiness = 90
net.ipv4.tcp_rfc1337=1
net.ipv4.tcp_max_orphans = 65536
net.ipv4.ip_local_port_range = 5000 65000
net.core.somaxconn = 1024
Saya sudah mencoba banyak saran tetapi sia-sia .. bagaimana cara memperbaikinya? Saya yakin server m2xlarge harus melayani lebih dari 300 permintaan, mungkin saya mungkin salah dengan konfigurasi saya ..
Server tersedak hanya selama jam sibuk dan ketika ada 300 permintaan bersamaan menunggu layanan web [300 detik tertunda] untuk merespons.
Saya baru saja memonitor koneksi tcp dengan netstat
saya menemukan sekitar 1000 koneksi dalam keadaan TIME_WAIT, tidak tahu apa artinya dalam hal kinerja, saya yakin itu pasti menambah masalah.
Output dari TOP
8902 root 25 0 19.6g 3.0g 12m S 3.3 8.8 13:35.77 java
24907 membase 25 0 753m 634m 2528 S 2.7 1.8 285:18.88 beam.smp
24999 membase 15 0 266m 121m 3160 S 0.7 0.3 51:30.37 memcached
27578 apache 15 0 230m 6300 1536 S 0.7 0.0 0:00.03 httpd
28551 root 15 0 11124 1492 892 R 0.3 0.0 0:00.25 top
Output of free -m
total used free shared buffers cached
35007 8470 26536 0 1 61
8407 26599
15999 15 15984
output of iostat
avg-cpu: %user %nice %system %iowait %steal %idle
26.21 0.00 0.48 0.13 0.02 73.15
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda1 14.36 4.77 329.37 9005402 622367592
sdb 0.00 0.00 0.00 1210 48
Juga pada waktu sibuk ada sekitar 10-15k koneksi tcp untuk membase server [lokal]
BEBERAPA KESALAHAN DALAM MODJK LOG, Saya harap ini menyoroti masalah ini ..
[Wed Jul 11 14:39:10.853 2012] [8365:46912560456400] [error] ajp_send_request::jk_ajp_common.c (1630): (tom2) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=110)
[Wed Jul 11 14:39:18.627 2012] [8322:46912560456400] [error] ajp_send_request::jk_ajp_common.c (1630): (tom2) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=110)
[Wed Jul 11 14:39:21.358 2012] [8351:46912560456400] [error] ajp_get_reply::jk_ajp_common.c (2118): (tom1) Tomcat is down or refused connection. No response has been sent to the client (yet)
[Wed Jul 11 14:39:22.640 2012] [8348:46912560456400] [error] ajp_get_reply::jk_ajp_common.c (2118): (tom1) Tomcat is down or refused connection. No response has been sent to the client (yet)
~
Worker.properties
workers.tomcat_home=/usr/local/tomcat/
worker.list=loadbalancer
worker.tom1.port=8009
worker.tom1.host=localhost
worker.tom1.type=ajp13
worker.tom1.socket_keepalive=True
worker.tom1.connection_pool_timeout=600
worker.tom2.port=8109
worker.tom2.host=localhost
worker.tom2.type=ajp13
worker.tom2.socket_keepalive=True
worker.tom2.connection_pool_timeout=600
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tom1,tom2
worker.loadbalancer.sticky_session=True
worker.tom1.lbfactor=1
worker.tom1.socket_timeout=600
worker.tom2.lbfactor=1
worker.tom2.socket_timeout=600
//Terpecahkan
thansk all untuk saran Anda yang berharga .. saya melewatkan pengaturan maxThreads untuk konektor AJP 1.3 .. Sekarang semuanya tampak terkendali.
Saya juga akan mulai melihat server berbasis bahkan seperti nginx.
top
tampilan selama waktu ini? Bagaimana dengan free -m
? Dan terakhir iostat
?