ฉันต้องการทำความเข้าใจกับปัญหาประสิทธิภาพการทำงานของเซิร์ฟเวอร์ที่ฉันเห็นด้วย (สำหรับเรา) เว็บเซิร์ฟเวอร์ที่โหลดหนัก สภาพแวดล้อมมีดังนี้:
- Debian Lenny (แพ็คเกจที่มีเสถียรภาพทั้งหมด + ได้รับการปรับปรุงเพื่อความปลอดภัยแล้ว)
- Apache 2.2.9
- PHP 5.2.6
- Amazon EC2 อินสแตนซ์ขนาดใหญ่
พฤติกรรมที่เราเห็นคือโดยทั่วไปแล้วเว็บจะรู้สึกตอบสนอง แต่มีความล่าช้าเล็กน้อยในการเริ่มจัดการคำขอ - บางครั้งเสี้ยววินาที, บางครั้ง 2-3 วินาทีในเวลาที่เราใช้งานมากที่สุด โหลดจริงบนเซิร์ฟเวอร์จะถูกรายงานว่าสูงมาก - มัก 10.xx หรือ 20.xx top
ตามการรายงานของ นอกจากนี้การเรียกใช้สิ่งอื่น ๆ บนเซิร์ฟเวอร์ในช่วงเวลานี้ (แม้vi
) จะช้ามากดังนั้นการโหลดจึงอยู่ที่นั่น Apache ก็ผิดปกติพอที่จะตอบสนองได้ดีนอกเหนือจากความล่าช้าครั้งแรก
เรามีการกำหนดค่า Apache ดังนี้ใช้ prefork:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
และ KeepAlive เป็น:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
ดูที่หน้าสถานะเซิร์ฟเวอร์แม้ในช่วงเวลาที่มีการโหลดจำนวนมากเราไม่ค่อยได้กดปุ่มไคลเอนต์ซึ่งมักจะให้บริการระหว่างคำขอ 80-100 รายการและหลายรายการที่อยู่ในสถานะ keepalive ที่บอกให้ฉันออกกฎคำขอเริ่มต้นช้าเป็น "รอจัดการ" แต่ฉันอาจจะผิด
การตรวจสอบ CloudWatch ของ Amazon บอกฉันว่าแม้ระบบปฏิบัติการของเราจะรายงานการโหลด> 15 แต่การใช้งาน CPU ของอินสแตนซ์ของเราอยู่ระหว่าง 75-80%
ตัวอย่างผลลัพธ์จากtop
:
top - 15:47:06 up 31 days, 1:38, 8 users, load average: 11.46, 7.10, 6.56
Tasks: 221 total, 28 running, 193 sleeping, 0 stopped, 0 zombie
Cpu(s): 66.9%us, 22.1%sy, 0.0%ni, 2.6%id, 3.1%wa, 0.0%hi, 0.7%si, 4.5%st
Mem: 7871900k total, 7850624k used, 21276k free, 68728k buffers
Swap: 0k total, 0k used, 0k free, 3750664k cached
กระบวนการส่วนใหญ่มีลักษณะดังนี้:
24720 www-data 15 0 202m 26m 4412 S 9 0.3 0:02.97 apache2
24530 www-data 15 0 212m 35m 4544 S 7 0.5 0:03.05 apache2
24846 www-data 15 0 209m 33m 4420 S 7 0.4 0:01.03 apache2
24083 www-data 15 0 211m 35m 4484 S 7 0.5 0:07.14 apache2
24615 www-data 15 0 212m 35m 4404 S 7 0.5 0:02.89 apache2
ตัวอย่างเอาต์พุตจากvmstat
ในเวลาเดียวกันกับด้านบน:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
8 0 0 215084 68908 3774864 0 0 154 228 5 7 32 12 42 9
6 21 0 198948 68936 3775740 0 0 676 2363 4022 1047 56 16 9 15
23 0 0 169460 68936 3776356 0 0 432 1372 3762 835 76 21 0 0
23 1 0 140412 68936 3776648 0 0 280 0 3157 827 70 25 0 0
20 1 0 115892 68936 3776792 0 0 188 8 2802 532 68 24 0 0
6 1 0 133368 68936 3777780 0 0 752 71 3501 878 67 29 0 1
0 1 0 146656 68944 3778064 0 0 308 2052 3312 850 38 17 19 24
2 0 0 202104 68952 3778140 0 0 28 90 2617 700 44 13 33 5
9 0 0 188960 68956 3778200 0 0 8 0 2226 475 59 17 6 2
3 0 0 166364 68956 3778252 0 0 0 21 2288 386 65 19 1 0
และสุดท้ายผลลัพธ์จาก Apache server-status
:
Server uptime: 31 days 2 hours 18 minutes 31 seconds
Total accesses: 60102946 - Total Traffic: 974.5 GB
CPU Usage: u209.62 s75.19 cu0 cs0 - .0106% CPU load
22.4 requests/sec - 380.3 kB/second - 17.0 kB/request
107 requests currently being processed, 6 idle workers
C.KKKW..KWWKKWKW.KKKCKK..KKK.KKKK.KK._WK.K.K.KKKKK.K.R.KK..C.C.K
K.C.K..WK_K..KKW_CK.WK..W.KKKWKCKCKW.W_KKKKK.KKWKKKW._KKK.CKK...
KK_KWKKKWKCKCWKK.KKKCK..........................................
................................................................
จากประสบการณ์ที่ จำกัด ของฉันฉันได้ข้อสรุป / คำถามต่อไปนี้:
เราอาจอนุญาต
KeepAlive
คำขอมากเกินไปฉันเห็นเวลาที่ใช้ในการรอ IO ใน vmstat แม้ว่าจะไม่สม่ำเสมอและไม่มาก (ฉันคิดว่าใช่ไหม) ดังนั้นฉันไม่แน่ใจว่านี่เป็นปัญหาใหญ่หรือไม่ฉันมีประสบการณ์น้อยกว่ากับ vmstat
นอกจากนี้ใน vmstat ฉันเห็นการทำซ้ำจำนวนหนึ่งซึ่งรอกระบวนการที่จะให้บริการซึ่งเป็นสิ่งที่ฉันอ้างถึงความล่าช้าในการโหลดหน้าเริ่มต้นบนเว็บเซิร์ฟเวอร์ของเราที่อาจผิดพลาด
เราให้บริการเนื้อหาแบบสแตติก (75% หรือสูงกว่า) และเนื้อหาของสคริปต์และเนื้อหาของสคริปต์มักจะมีตัวประมวลผลค่อนข้างเข้มข้นดังนั้นการค้นหาความสมดุลที่เหมาะสมระหว่างสองสิ่งนี้เป็นสิ่งสำคัญ ในระยะยาวเราต้องการย้ายสถิติที่อื่นเพื่อเพิ่มประสิทธิภาพเซิร์ฟเวอร์ทั้งสอง แต่ซอฟต์แวร์ของเรายังไม่พร้อมสำหรับวันนี้
ผมมีความสุขที่จะให้ข้อมูลเพิ่มเติมถ้าใครมีความคิดใด ๆ ที่ทราบอื่น ๆ คือที่นี้คือการติดตั้งการผลิตว่างสูงดังนั้นผมระวังในการทำบิดหลังจากที่ปรับแต่งและเป็นเหตุผลว่าทำไมผมไม่ได้เล่นกับสิ่งที่ต้องการKeepAlive
ค่าตัวเอง ยัง