ขณะนี้ฉันมีเซิร์ฟเวอร์ Apache2 ที่ใช้งานmpm-prefork
และmod_php
บน OpenVZ VPS พร้อม RAM ที่สามารถระเบิดได้ 512M จริง / 1024M (ไม่มีการสลับ) หลังจากใช้การทดสอบบางอย่างฉันพบว่าขนาดกระบวนการสูงสุดที่ Apache ได้รับคือ 23M ดังนั้นฉันจึงตั้งค่าMaxClients
เป็น 25 (23M x 25 = 575 MB ตกลงสำหรับฉัน) ฉันตัดสินใจรันการทดสอบโหลดบนเซิร์ฟเวอร์ของฉันและผลลัพธ์ก็ทำให้ฉันงง
ฉันใช้ab
เครื่องเดสก์ท็อปเพื่อขอหน้าหลักจากบล็อก WordPress
เมื่อฉันทำงานab
ด้วยการเชื่อมต่อพร้อมกัน 24 รายการทุกอย่างดูใช้ได้ แน่นอนว่าซีพียูสูงขึ้นแรมฟรีลดลงและผลลัพธ์ก็คือเวลาตอบสนอง 2-3 วินาทีต่อคำขอ
แต่ถ้าฉันใช้ab
การเชื่อมต่อพร้อมกัน 25 ครั้ง (ขีด จำกัด เซิร์ฟเวอร์ของฉัน) Apache จะหยุดทำงานหลังจากผ่านไปสองสามวินาที มันเริ่มประมวลผลการร้องขอจากนั้นจะหยุดตอบสนอง CPU กลับไปที่ไม่ได้ใช้งาน 100% และab
หมดเวลา Apache log บอกว่ามันมาถึงMaxClients
แล้ว
เมื่อสิ่งนี้เกิดขึ้น Apache จะล็อคตัวเองด้วยกระบวนการทำงาน 25 กระบวนการ (ทั้งหมดอยู่ใน "W" ถ้าฉันตรวจสอบสถานะเซิร์ฟเวอร์) และหลังจากการTimeOut
ตั้งค่ากระบวนการเริ่มตายและเซิร์ฟเวอร์เริ่มตอบสนองอีกครั้ง (ในกรณีของฉันมันตั้งไว้ ถึง 45)
คำถามของฉัน: นั่นเป็นพฤติกรรมที่คาดหวังหรือไม่ ทำไม Apache ถึงตายเมื่อมันมาถึงMaxClients
? หากใช้งานได้กับ 24 คนเชื่อมต่อมันจะไม่ทำงานกับ 25 แค่ใช้เวลานานกว่านี้ในการตอบคำขอแต่ละครั้งและรอคิวที่เหลือ
มันฟังดูแปลก ๆ นะกับผมว่าเด็ก ๆ วิ่งเพียงอย่างเดียวสามารถฆ่าเว็บเซิร์ฟเวอร์เพียงโดยการตั้งค่าการเชื่อมต่อพร้อมกันไปยังเซิร์ฟเวอร์ab
MaxClients