Score:4

สคริปต์ PHP โหลดช้ามากใน Apache

ธง jp

ฉันกำลังทดสอบว่าเหตุใดบางครั้งสคริปต์ PHP ของฉันจึงใช้เวลานานในการโหลดผ่านเครือข่าย (>30 วินาที) บนเซิร์ฟเวอร์ Apache 2.4 Ubuntu ของฉันด้วย PHP-FPM 7.4 โดยใช้ mpm_event เซิร์ฟเวอร์ทำงานได้ตามปกติในช่วงไม่กี่เดือนที่ผ่านมา สิ่งนี้เริ่มเกิดขึ้นเมื่อสองสามวันก่อนและฉันไม่ได้เปลี่ยนแปลงอะไรเลย ฉันรีบูตเครื่อง มันไม่ได้ช่วยอะไร

ฉันทำแบบง่ายๆ test.php. บางครั้งโหลดได้ตามปกติ (<100ms) แต่บางครั้งก็ใช้เวลาโหลด 1 นาที:

<?php echo "test\n"; ?>

ป้อนคำอธิบายรูปภาพที่นี่

  • CPU, RAM และ IO ของเซิร์ฟเวอร์เป็นปกติทั้งหมด (ตรวจสอบด้วย ท็อป).
  • ไฟล์ HTML แบบสแตติกจะถูกโหลดโดยไม่มีการหน่วงเวลา
  • การเรียกใช้สคริปต์ในเครื่องผ่านคอนโซล SSH นั้นรวดเร็วมาก
  • บันทึกข้อผิดพลาดของ Apache ไม่แสดงสิ่งผิดปกติ
  • ฉันตรวจสอบว่ามีการโจมตี DDOS หรือไม่ โดยตรวจสอบจำนวน IP ที่เชื่อมต่อจากเครือข่ายย่อย /16 เดียวกัน และไม่พบสิ่งแปลกปลอม (เช่น การเชื่อมต่อ >100 ครั้ง)

ฉันจะดีบักสิ่งนี้เพิ่มเติมได้อย่างไรเพื่อดูว่าเหตุใดจึงเกิดขึ้น


เอาต์พุตการดีบักบางอย่างซึ่งอาจช่วยได้:

บริการ sudo สถานะ php7.4-fpm

ป้อนคำอธิบายรูปภาพที่นี่

Score:5
ธง fr

อาจมีสาเหตุหลายประการสำหรับพฤติกรรมนี้:

  1. หากเว็บเซิร์ฟเวอร์นี้ประมวลผลคำขอจากเครือข่ายภายนอก เมื่อมีปริมาณการรับส่งข้อมูลเพิ่มขึ้น โหลดอาจเพิ่มขึ้น ซึ่งทำให้เวลาตอบสนองของเซิร์ฟเวอร์เพิ่มขึ้น
  2. หากสคริปต์ของคุณใช้การเรียกไปยังทรัพยากรภายนอก ในกรณีนี้ เวลาตอบสนองของเซิร์ฟเวอร์ของคุณอาจเพิ่มขึ้นเนื่องจากความเร็วในการตอบสนองต่ำของทรัพยากรภายนอก

ข้อความบันทึก:

[30-ก.ย.-2021 03:36:46] คำเตือน: เซิร์ฟเวอร์ [pool www] ถึงการตั้งค่า pm.max_children (5) ให้พิจารณาเพิ่ม

เป็นเพียงข้อพิสูจน์ถึงภาระที่เพิ่มขึ้น

ในทั้งสองกรณี คุณควรระบุสาเหตุของการโหลดโดยการวิเคราะห์จำนวนคำขอที่ส่งไปยังสคริปต์ และหากมีการเรียกไปยังทรัพยากรภายนอก ตรวจสอบให้แน่ใจว่าทำงานได้อย่างถูกต้อง

Score:4
ธง jp

ฉันคิดว่าฉันพบวิธีแก้ไขแล้ว แต่ถ้าคุณมีข้อเสนอแนะ โปรดแจ้งให้เราทราบหรือโพสต์คำตอบอื่น

ฉันตรวจสอบแล้ว /var/log/php7.4-fpm.log และเห็นหลายรายการเช่นนี้:

[30-Sep-2021 03:36:46] คำเตือน: ถึงเซิร์ฟเวอร์ [pool www] แล้ว การตั้งค่า pm.max_children (5) ให้พิจารณายกขึ้น

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นฉัน ที่ยกขึ้น เดอะ max_children ถึง 15 และดูเหมือนว่าจะช่วยได้

Score:1
ธง es

ดังที่คุณเห็นในเอาต์พุตสถานะของคุณ ป้อนคำอธิบายรูปภาพที่นี่ คุณมีงานรอให้เริ่ม (5 งาน, 0 งานว่าง, 6 งาน) ในขณะที่คุณโพสต์ในคำตอบของคุณเอง (และฉันดีใจที่มันได้ผล) การเพิ่มจำนวนเด็กที่อนุญาตอาจเป็นวิธีแก้ปัญหาที่ดี - แต่มีหลายอย่างที่ต้องพิจารณาในการเพิ่มประสิทธิภาพ php-fpm และควรคิดให้มากกว่านี้ ทั้งระบบ ก่อนทำการเปลี่ยนแปลงการกำหนดค่าเหล่านี้

คู่มือที่มั่นคงคือ ที่นี่.

แต่ไม่ว่าคุณควรรู้อะไรบ้างเมื่อใช้ค่าคงที่:
ถ้า (ประมวลผลการใช้หน่วยความจำ * max_children > RAM)
{ [อาปาเช่ขัดข้อง] }

ถ้า (ข้อกำหนดการประมวลผล * start_servers > CPU)
{ [อาปาเช่ขัดข้อง] }

และมักจะ รู้จักฮาร์ดแวร์ของคุณ ก่อนที่จะปรับแต่งการตั้งค่าเหล่านี้ โดยเฉพาะอย่างยิ่งในไดนามิก/ตามความต้องการ (imo ง่ายต่อการทำผิดพลาด)

หากคุณกำลังทำสิ่งนี้กับเว็บเซิร์ฟเวอร์ธุรกิจที่มีความสำคัญต่อภารกิจประเภทใดก็ตาม ฉันตั้งเป้าที่จะปัดเศษขึ้นแล้วเพิ่มประมาณการทั้งหมดเป็นสองเท่า เช่น กระบวนการที่ใหญ่ที่สุดที่สามารถเรียกได้นั้นใช้ 178mb ดังนั้น 200mb และ VM ปัจจุบันของคุณบน [insert hosting provider/self] มี RAM เพียง 1gb - ฉันจะตั้งค่า max_children เป็น 2 -- จากนั้นเมื่อคุณอัพเกรด VM ของคุณ (คุณทำอะไรกับ 1gb ในปี 2021??) และคุณมี RAM 8gb บนเซิร์ฟเวอร์ของคุณ คุณสามารถใช้ max_children = 18 สังเกตว่าในทั้งสองตัวอย่าง การปัดเศษเป็นการสนับสนุนทรัพยากรเพิ่มเติม และหลังจากเพิ่มเป็นสองเท่าเพื่อวัตถุประสงค์ของ fpm จะเหลือหน่วยความจำก้อนหนึ่งสำหรับระบบปฏิบัติการและกระบวนการเบื้องหลังอื่นๆ ที่จะใช้

การปรับแต่งการตั้งค่าเหล่านี้มีประโยชน์อย่างมาก และใครก็ตามที่ใช้ apache ควรรู้วิธี - โปรดตรวจสอบให้แน่ใจว่าฮาร์ดแวร์ของคุณสามารถจัดการกับการกำหนดค่าซอฟต์แวร์ที่คุณตั้งค่าไว้ได้

sa flag
ความจริงที่ว่าใช้เวลาทั้งหมดหนึ่งนาทีทำให้ฉันคิดว่างานอื่นค่อนข้างช้า
Score:0
ธง in

เราเกือบจะมีปัญหาเดียวกันนี้เมื่อปีที่แล้ว

การเลี้ยงลูกให้มากที่สุดจะช่วยชดเชยปัญหาในภายหลังเท่านั้น

มันกลายเป็นฐานข้อมูล MySQL ที่ช้าซึ่งโฮสต์บนเซิร์ฟเวอร์เฉพาะบนเครือข่ายของเราสำหรับบล็อก

PHP ของเราได้รับการกำหนดค่าให้ลองเชื่อมต่อเป็นเวลา 30 วินาที และเมื่อใดก็ตามที่ฐานข้อมูลนี้ตัดสินใจที่จะทำงาน มันก็จะเคี้ยว PHP ย่อย 100 ลูก

เราลดลงเหลือ 1 วินาทีและปัญหาก็หายไป ฉันจำไม่ได้ว่าปัญหาฐานข้อมูลเกี่ยวข้องกับเครือข่ายหรือเราต้องเพิ่มประสิทธิภาพฐานข้อมูลเอง

คุณควรตรวจสอบบันทึกการเข้าถึง Apache ของคุณสำหรับกรอบเวลา 2:30-3:30 และดูว่าเป็นหน้าที่เชื่อมต่อกับฐานข้อมูลหรือไม่ ตรวจสอบบันทึกข้อผิดพลาด 500 รายการที่นำไปสู่การล่มสลายของเซิร์ฟเวอร์

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา