เรามีเว็บเซิร์ฟเวอร์ apache หน้า Tomcat ที่โฮสต์บน EC2 ประเภทอินสแตนซ์มีขนาดใหญ่เป็นพิเศษพร้อมหน่วยความจำ 34GB
แอปพลิเคชันของเรามีเว็บเซอร์วิสภายนอกจำนวนมากและเรามีเว็บเซอร์ภายนอกที่น่ารังเกียจซึ่งใช้เวลาเกือบ 300 วินาทีในการตอบสนองต่อคำขอระหว่างชั่วโมงเร่งด่วน
ในช่วงชั่วโมงเร่งด่วนเซิร์ฟเวอร์จะทำการประมวลผลที่ httpd เพียงประมาณ 300 กระบวนการ ps -ef | grep httpd | wc -l = 300
ฉัน googled และพบข้อเสนอแนะมากมาย แต่ดูเหมือนว่าจะไม่มีอะไรทำงาน .. ต่อไปนี้คือการกำหนดค่าบางอย่างที่ฉันทำซึ่งนำมาจากแหล่งข้อมูลออนไลน์โดยตรง
ฉันเพิ่มขีด จำกัด ของการเชื่อมต่อสูงสุดและไคลเอนต์สูงสุดทั้งใน apache และ tomcat นี่คือรายละเอียดการกำหนดค่า:
// Apache
<IfModule prefork.c>
StartServers 100
MinSpareServers 10
MaxSpareServers 10
ServerLimit 50000
MaxClients 50000
MaxRequestsPerChild 2000
</IfModule>
// คราว
<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
ฉันลองใช้คำแนะนำมากมาย แต่มันก็ไร้ประโยชน์ .. จะแก้ไขได้อย่างไร? ฉันแน่ใจว่าเซิร์ฟเวอร์ m2x large ควรให้บริการมากกว่า 300 คำขอบางทีฉันอาจจะผิดกับการกำหนดค่าของฉัน
เซิร์ฟเวอร์จะสำลักเฉพาะในช่วงชั่วโมงเร่งด่วนและเมื่อมีการร้องขอพร้อมกัน 300 คำขอที่รอให้เว็บเซอร์ [300 วินาทีล่าช้า] ตอบกลับ
ฉันเพิ่งตรวจสอบการเชื่อมต่อ tcp กับ netstat
ฉันพบการเชื่อมต่อประมาณ 1,000 ครั้งในสถานะ TIME_WAIT ไม่ทราบว่าจะหมายถึงอะไรในแง่ของประสิทธิภาพฉันแน่ใจว่าจะต้องเพิ่มปัญหา
การส่งออกของ 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
เวลาสูงสุดมีการเชื่อมต่อ tcp ประมาณ 10-15k กับเซิร์ฟเวอร์ membase [ท้องถิ่น]
ข้อผิดพลาดบางอย่างในการเข้าสู่ระบบ MODJK ฉันหวังว่านี้จะโยนแสงในปัญหา ..
[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
// แก้ไข
ขอบคุณสำหรับคำแนะนำที่มีค่าของคุณ .. ฉันพลาดการตั้งค่า maxThreads สำหรับตัวเชื่อมต่อ AJP 1.3 .. ตอนนี้ทุกอย่างดูเหมือนจะอยู่ภายใต้การควบคุม
ฉันจะเริ่มดูเซิร์ฟเวอร์ที่ใช้งานง่ายเช่น nginx
top
หน้าตาเป็นอย่างไรในช่วงเวลาเหล่านี้? แล้วไงfree -m
ล่ะ และในที่สุดiostat
?