เซิร์ฟเวอร์ของฉันใช้งาน Ubuntu 18.04.5 LTS พร้อม LAMP stack (PHP 7.4) และ apache เวอร์ชัน 2.4.29 โดยใช้ Prefork MPM เซิร์ฟเวอร์ของฉันมี 16 CPU และ RAM 29GB เซิร์ฟเวอร์นี้โฮสต์ 258 เว็บไซต์
เมื่อใดก็ตามที่ฉันรีบูทเซิร์ฟเวอร์ ฉันสังเกตเห็น (โดยใช้คำสั่งด้านบน) ว่า apache กำลังสร้างกระบวนการจำนวนมหาศาล นี่เป็นการโอเวอร์โหลดเซิร์ฟเวอร์อย่างสมบูรณ์ สิ่งนี้จะเกิดขึ้นเฉพาะเมื่อฉันรีบูตเซิร์ฟเวอร์ หรือฉันหยุด apache (service apache2 stop) ด้วยตนเอง แล้วเริ่ม apache (service apache2 start)
โดยปกตินี่คือเอาต์พุตของด้านบน (ในช่วงเวลาปกติ):
หลังจากรีบูตหรือหยุดและเริ่ม apache ด้วยตนเอง ค่าเฉลี่ยการโหลดจะเพิ่มขึ้นเป็นมากกว่า 126.4! จะค่อยๆ (ประมาณ 10-15 นาที) กลับสู่สภาวะปกติ ในช่วง 5 นาทีแรกหลังจากรีบูตหรือหยุดและเริ่มต้น apache โหลดจะไต่ขึ้นเรื่อย ๆ จนกระทั่งถึงประมาณ 126-130
นี่คือการกำหนดค่า MPM ของฉัน (/etc/apache2/mods-enabled/mpm_prefork.conf):
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
นอกจากนี้ KeepAlive ยังเปิดอยู่ MaxKeepAliveRequests คือ 100 และ KeepAliveTimeout คือ 2
สิ่งที่แปลกมากคือฉันทำสำเนาของเซิร์ฟเวอร์อย่างถูกต้อง และวางไซต์จำนวนหนึ่ง (6 เว็บไซต์) บนสำเนานั้น และเมื่อฉันรีบูต หรือเริ่มและหยุด apache บนเซิร์ฟเวอร์สำเนานี้ พฤติกรรมนี้จะไม่เกิดขึ้น นี่เป็นสำเนาที่แน่นอนของเซิร์ฟเวอร์ที่กล่าวถึงข้างต้น มันเป็นเพียงการโฮสต์เว็บไซต์ 6 แห่งเท่านั้น (ทราฟฟิกน้อยลง) แทนที่จะเป็น 258
ปัญหานี้อาจเกิดจากการเชื่อมต่อไคลเอ็นต์มากเกินไปที่รอให้ apache ตอบสนองระหว่างการรีบูต และเมื่อเซิร์ฟเวอร์ apache กลับมาทำงานอีกครั้ง ในที่สุด apache จะล้นไปด้วยการเชื่อมต่อ
การเพิ่มค่าในการกำหนดค่า MPM ของฉันจะช่วยได้หรือไม่ ฉันตรวจสอบบันทึกแล้ว และฉันไม่เคยตรวจสอบ MaxRequestWorkers เลย