php5-fpm: เซิร์ฟเวอร์ถึง pm.max_children


41

ฉันมีNginx + php5-FPM หลายครั้งต่อชั่วโมงเว็บไซต์ของฉัน stucks และใน logfile ฉันเห็นต่อไปนี้:

คำเตือน: เซิร์ฟเวอร์ [พูล www] ถึงการตั้งค่า pm.max_children (5) ให้ลองเพิ่ม

ไฟล์/etc/php5/fpm/pool.d/www.confมีการกำหนดค่าต่อไปนี้:

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

เซิร์ฟเวอร์: AMD Opteron ™ 3280, Octo-Core, 8x 2.4 GHz, 16 GB DIMM (DDR3)

ฉันไม่รู้ว่าฉันควรใส่ตัวเลขอะไรในไฟล์ www.conf สำหรับเซิร์ฟเวอร์นี้ ฉันช่วยคนได้ไหม ขอบคุณ

คำตอบ:


40

มีเหตุผลที่เป็นไปได้มากว่าทำไม PHP-FPM max_childrenของคุณจะมาถึงที่มี คนที่พบมากที่สุดคือ:

  • คำขอแบบขนานจำนวนมากจากลูกค้าของคุณ
  • การทำงานของสคริปต์ PHP ช้าลง
  • การตั้งค่าที่ต่ำมากของ max_children

ดูสเปคของเครื่องของคุณสมมติว่าไม่มีอะไรอื่นนอกจาก PHP + Nginx ที่ใช้งานอยู่ฉันคิดว่าคุณสามารถตั้งค่ามันได้สูงกว่า 5 มากคุณบอกว่าคุณมี 8 Cores โดยปกติ Nginx ต้องการ CPU น้อยกว่า PHP ดังนั้นด้วยเด็ก 5 คน คุณอาจจะไม่สามารถใช้ทั้งหมดได้ ฉันมักจะตั้งค่าเป็นจำนวนแกน x 2หรือจำนวนแกน x 4ขึ้นอยู่กับการใช้หน่วยความจำของสคริปต์ PHP ของคุณ


มันเป็นเว็บไซต์หาคู่ที่มีการแชทด้วย php และผู้ใช้ส่งข้อความด่วนนับล้าน เมื่อคืนเมื่อฉันมีผู้ใช้ออนไลน์ประมาณ 300 คนคำสั่ง netstat -an | grep 80 | wc - ผลลัพธ์เกือบ 400 รายการ
user1821484

1
จริง ๆ แล้วฉันมีเว็บไซต์หาคู่ที่คล้ายกัน ฉันคิดว่าคุณต้องการเด็ก PHP เพิ่มขึ้นอย่างแน่นอน การกำหนดค่าของฉันมีดังต่อไปนี้: ผู้ใช้ออนไลน์พร้อมกัน 20k, เครื่อง PHP 12 เครื่อง, 8 คอร์แต่ละเครื่อง, 32 คนสำหรับเครื่อง PHP แต่ละเครื่อง มันใช้งานได้ดีทีเดียว คุณควรดูว่าคุณมีหน่วยความจำว่างเท่าไหร่ฉันคิดว่าคุณมีบางอย่างยกเว้นว่า PHP ของคุณมีขนาดใหญ่มาก หากคุณมีหน่วยความจำว่างทำไมไม่ลองใช้มันกับคนทำงานอีกล่ะ?
เล่นซ้ำ

@ user1821484 สิ่งนี้ถูกต้อง; pm.max_childrenเป็นมากต่ำเกินไป ค่า 10 นั้นเหมาะสมสำหรับเซิร์ฟเวอร์ VPS ขนาดเล็กที่มี RAM 1GB คุณมีเซิร์ฟเวอร์ที่ใหญ่กว่ามาก เพิ่มค่านี้จนกว่าคุณจะหยุดรับข้อผิดพลาดจากนั้นเพิ่มอีกครั้งในกรณีที่คุณได้รับปริมาณข้อมูลเพิ่มขึ้น
Michael Hampton

ขอบคุณสำหรับคำตอบ ฉันเพิ่มการตั้งค่า pm.max_children เป็น 10 และตอนนี้ฉันเริ่มได้รับข้อผิดพลาดนี้: คำเตือน: [พูล www] ดูเหมือนไม่ว่าง (คุณอาจต้องเพิ่ม pm.start_servers หรือ pm.min / max_spare_servers) วางไข่เด็ก 16 คนมี 0 คน ไม่ได้ใช้งานและมีลูกทั้งหมด 8 คน ใครช่วยแนะนำสิ่งที่ฉันต้องเพิ่ม ขอบคุณ
user1821484

แกน x 2 หรือแกน x 4 ฟังดูไม่ค่อยดีสำหรับฉัน ฉันมีเครื่องที่มี 8 คอร์และ RAM 8GB พร้อมpm.max_children = 48และเรายังคงได้รับเซิร์ฟเวอร์ถึงคำเตือนpm.max_children เครื่องนี้ไม่มีที่อยู่ใกล้กับ CPU หรือขีด จำกัด หน่วยความจำ วิธีที่ดีกว่าฉันคิดว่าจะเพิ่มประสิทธิภาพการตั้งค่านี้ร่วมกับการตั้งค่า nginx (หรือ apache) ที่สอดคล้องกันและเลือกค่าหลังจากพิจารณาจำนวนหน่วยความจำในแต่ละกระบวนการ PHP ที่ใช้ไป
เอส. เปรต

18

ฉันพบว่าโดยการตั้งค่า pm.max_requests (ซึ่งถูกใส่ความคิดเห็นโดยค่าเริ่มต้น) ช่วยในการแก้ไขข้อผิดพลาดเหล่านี้ การตั้งค่านี้บังคับให้เด็กร้องขอให้เกิดใหม่หลังจากดำเนินการตามคำขอจำนวนหนึ่งและอาจมีประโยชน์หากหน่วยความจำรั่วในรหัสของคุณหรือ libs ของบุคคลที่สาม

ใน/etc/php-fpm.d/www.conf :

pm.max_requests = 500

13

ลิงก์นี้อาจมีประโยชน์ - มันอธิบายวิธีการคำนวณจำนวนกระบวนการลูกตามจำนวนหน่วยความจำในระบบ:


7
คำตอบนี้จะไร้ประโยชน์เมื่อลิงก์นั้นหายไป
miken32

2
โดยพื้นฐานแล้วลิงค์บอกว่า ... ค่าที่เหมาะสมสำหรับ pm.max_children สามารถคำนวณได้เป็น: pm.max_children = RAM ทั้งหมดที่ทุ่มเทให้กับเว็บเซิร์ฟเวอร์ / ขนาดกระบวนการเด็กสูงสุด
jaywhy13
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.