บทความนี้มีเวอร์ชันที่ไม่มีการแก้ไขเผยแพร่ครั้งแรกเมื่อ
ฉันจะบอกคุณโดยสรุปว่าวิธีที่ดีที่สุดในการกำหนดค่า PHP-FPM เพื่อเพิ่มปริมาณงาน ลดเวลาแฝง และใช้ CPU และหน่วยความจำมีความสม่ำเสมอมากขึ้น ตามค่าเริ่มต้น บรรทัด PM (ตัวจัดการกระบวนการ) ใน PHP-FPM คือ พลวัตและถ้าคุณมีหน่วยความจำไม่เพียงพอก็ควรติดตั้งจะดีกว่า ตามความต้องการ. ลองเปรียบเทียบตัวเลือกการควบคุม 2 ตัวเลือกตามเอกสาร php.net และดูว่าตัวเลือกที่ฉันชื่นชอบแตกต่างจากตัวเลือกเหล่านั้นอย่างไร คงที่ pm สำหรับปริมาณการใช้ข้อมูลสูง:
น. = ไดนามิก — จำนวนกระบวนการลูกได้รับการกำหนดค่าแบบไดนามิกตามคำสั่งต่อไปนี้: pm.max_children, pm.start_servers,pm.min_spare_servers, pm.max_spare_servers.
pm = ออนดีมานด์ - กระบวนการถูกสร้างขึ้นตามความต้องการ (ตรงข้ามกับการสร้างแบบไดนามิก เมื่อ pm.start_servers เปิดตัวเมื่อบริการเริ่มต้น)
น = คงที่ — จำนวนกระบวนการย่อยได้รับการแก้ไขและระบุโดยพารามิเตอร์ pm.max_children.
สำหรับรายละเอียด โปรดดู
ความคล้ายคลึงกันระหว่างตัวจัดการกระบวนการ PHP-FPM และตัวควบคุมความถี่ของ CPU
นี่อาจดูไม่ตรงประเด็น แต่ฉันจะเชื่อมโยงสิ่งนี้กับหัวข้อการกำหนดค่า PHP-FPM ใครบ้างที่ไม่เคยประสบปัญหาโปรเซสเซอร์ช้าลงอย่างน้อยหนึ่งครั้ง บนแล็ปท็อป เครื่องเสมือน หรือเซิร์ฟเวอร์เฉพาะ จำการปรับขนาดความถี่ CPU ได้ไหม ตัวเลือกเหล่านี้มีให้สำหรับ nix และ Windows สามารถปรับปรุงประสิทธิภาพและการตอบสนองของระบบโดยเปลี่ยนการตั้งค่าคันเร่งของโปรเซสเซอร์จาก ตามความต้องการ บน ผลงาน*. คราวนี้เรามาเปรียบเทียบคำอธิบายและดูความคล้ายคลึงกัน:
ผู้ว่าการ = ตามความต้องการ — การปรับขนาดความถี่โปรเซสเซอร์แบบไดนามิกขึ้นอยู่กับโหลดปัจจุบัน กระโดดไปที่ความถี่สูงสุดอย่างรวดเร็ว จากนั้นลดความถี่ลงเมื่อไม่มีการใช้งานเพิ่มขึ้น
ผู้ว่าการ = อนุรักษ์นิยม = การปรับความถี่แบบไดนามิกขึ้นอยู่กับโหลดปัจจุบัน เพิ่มและลดความถี่ได้ราบรื่นกว่าออนดีมานด์
ผู้ว่าการ = ประสิทธิภาพ — ความถี่สูงสุดเสมอ
สำหรับรายละเอียด โปรดดู
เห็นความคล้ายคลึงกันไหม? ฉันต้องการแสดงการเปรียบเทียบนี้เพื่อโน้มน้าวคุณว่าควรใช้ดีที่สุด น. คงที่ สำหรับ PHP-FPM
สำหรับพารามิเตอร์ตัวควบคุมโปรเซสเซอร์ การปฏิบัติ ช่วยเพิ่มประสิทธิภาพได้อย่างปลอดภัยเพราะเกือบทั้งหมดขึ้นอยู่กับขีดจำกัด CPU ของเซิร์ฟเวอร์ นอกจากนี้ แน่นอนว่ายังมีปัจจัยต่างๆ เช่น อุณหภูมิ การชาร์จแบตเตอรี่ (ในแล็ปท็อป) และผลข้างเคียงอื่นๆ จากการที่โปรเซสเซอร์ทำงานอย่างต่อเนื่องที่ 100% การตั้งค่าประสิทธิภาพช่วยให้มั่นใจได้ถึงประสิทธิภาพของโปรเซสเซอร์ที่เร็วที่สุด อ่านเช่นเกี่ยวกับ
การใช้ pm แบบคงที่เพื่อให้ได้ประสิทธิภาพเซิร์ฟเวอร์สูงสุด
ตัวเลือก PHP-FPM น. คงที่ ส่วนใหญ่ขึ้นอยู่กับหน่วยความจำว่างบนเซิร์ฟเวอร์ ถ้าหน่วยความจำเหลือน้อยก็ควรเลือก ตามความต้องการ หรือ พลวัต. ในทางกลับกัน หากคุณมีหน่วยความจำ คุณสามารถหลีกเลี่ยงค่าใช้จ่ายของตัวจัดการกระบวนการ PHP ได้โดยการตั้งค่า pm คงที่ จนถึงความจุเซิร์ฟเวอร์สูงสุด กล่าวอีกนัยหนึ่ง หากทุกอย่างคำนวณได้ดี คุณจะต้องสร้าง น.คงที่ จนถึงปริมาณสูงสุดของกระบวนการ PHP-FPM ที่สามารถดำเนินการได้ โดยไม่สร้างปัญหากับหน่วยความจำหรือแคชเหลือน้อย แต่ไม่สูงจนล้นโปรเซสเซอร์และสะสมการดำเนินการ PHP-FPM มากมายที่รอดำเนินการ.
ในภาพหน้าจอด้านบน เซิร์ฟเวอร์มี pm = คงที่และ pm.max_children = 100และจะใช้พื้นที่ประมาณ 10 GB จากทั้งหมด 32 รายการ ให้ความสนใจกับคอลัมน์ที่ไฮไลต์ทุกอย่างชัดเจนที่นี่ ในภาพหน้าจอนี้มีผู้ใช้งานประมาณ 200 ราย (มากกว่า 60 วินาที) ใน Google Analytics ในระดับนี้ กระบวนการย่อย PHP-FPM ประมาณ 70% ยังคงไม่ได้ใช้งาน ซึ่งหมายความว่า PHP-FPM จะถูกตั้งค่าเป็นจำนวนทรัพยากรเซิร์ฟเวอร์สูงสุดเสมอ โดยไม่คำนึงถึงการรับส่งข้อมูลในปัจจุบัน กระบวนการที่ไม่ได้ใช้งานจะรอปริมาณการรับส่งข้อมูลสูงสุดและตอบสนองทันที คุณไม่ต้องรอจนกระทั่ง pm จะสร้างกระบวนการย่อยแล้วยุติกระบวนการเหล่านั้นเมื่อพ้นระยะเวลา pm.process_idle_timeout. ฉันตั้งค่าไว้สูงมาก pm.max_requestsเพราะนี่คือเซิร์ฟเวอร์ที่ใช้งานได้โดยไม่มีหน่วยความจำรั่วใน PHP คุณสามารถติดตั้งได้ น.max_requests = 0 แบบคงที่หากคุณมั่นใจอย่างสมบูรณ์ในสคริปต์ PHP ที่มีอยู่และในอนาคต แต่จะดีกว่าถ้ารันสคริปต์ใหม่เมื่อเวลาผ่านไป ตั้งค่าคำขอจำนวนมาก เนื่องจากเราต้องการหลีกเลี่ยงค่าใช้จ่าย pm ที่ไม่จำเป็น ตัวอย่างเช่นอย่างน้อย น.max_requests = 1000 - ขึ้นอยู่กับปริมาณ pm.max_children และจำนวนคำขอต่อวินาที
ภาพหน้าจอแสดงคำสั่ง
top -bn1 | grep php-fpm
เมื่อใดจึงควรใช้ pm ตามความต้องการและไดนามิก
ถ้าใช้ pm พลวัตข้อผิดพลาดเช่นนี้เกิดขึ้น:
WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children
ลองเปลี่ยนพารามิเตอร์แล้วข้อผิดพลาดจะไม่หายไปเช่น
PM พลวัต และโดยเฉพาะ ตามความต้องการ อาจมีประโยชน์หากคุณมีพูล PHP-FPM หลายตัว ตัวอย่างเช่น คุณโฮสต์บัญชี cPanel หลายบัญชีหรือหลายเว็บไซต์ในกลุ่มที่แตกต่างกัน ฉันมีเซิร์ฟเวอร์ที่มีบัญชี cpanel กว่า 100 บัญชีและโดเมนประมาณ 200 โดเมน และ pm.static หรือแม้แต่ไดนามิกก็ไม่สามารถช่วยฉันได้ สิ่งที่คุณต้องการที่นี่คือ ตามความต้องการท้ายที่สุดแล้ว เว็บไซต์มากกว่าสองในสามได้รับการเข้าชมเพียงเล็กน้อยหรือไม่มีเลย และด้วย ตามความต้องการ กระบวนการย่อยทั้งหมดจะล้มเหลวซึ่งจะช่วยเราประหยัดความจำได้มาก! โชคดีที่นักพัฒนา cPanel สังเกตเห็นสิ่งนี้และตั้งค่าเป็นค่าเริ่มต้น ตามความต้องการ. ก่อนหน้านี้เมื่อค่าเริ่มต้นคือ พลวัต, PHP-FPM ไม่เหมาะสำหรับเซิร์ฟเวอร์ที่ใช้ร่วมกันที่มีงานยุ่งเลย หลายคนได้ใช้ suPHPเพราะบ่ายโมง พลวัต ใช้หน่วยความจำแม้จะมีพูลที่ไม่ได้ใช้งานและบัญชี cPanel PHP-FPM เป็นไปได้มากว่าหากการรับส่งข้อมูลดี คุณจะไม่ได้โฮสต์บนเซิร์ฟเวอร์ที่มีพูล PHP-FPM จำนวนมาก (โฮสติ้งที่ใช้ร่วมกัน)
ข้อสรุป
หากคุณใช้ PHP-FPM และมีการรับส่งข้อมูลหนาแน่น ผู้จัดการกระบวนการ ตามความต้องการ и พลวัต สำหรับ PHP-FPM จะถูกจำกัดปริมาณงานเนื่องจากค่าใช้จ่ายโดยธรรมชาติ ทำความเข้าใจระบบของคุณและกำหนดค่ากระบวนการ PHP-FPM ตามความจุสูงสุดของเซิร์ฟเวอร์ ชุดแรก pm.max_children ขึ้นอยู่กับการใช้งาน pm สูงสุด พลวัต หรือ ตามความต้องการจากนั้นเพิ่มค่านี้เป็นระดับที่หน่วยความจำและโปรเซสเซอร์จะทำงานโดยไม่โอเวอร์โหลด คุณจะสังเกตได้ว่าด้วย น. คงที่เนื่องจากคุณมีทุกอย่างในหน่วยความจำ ปริมาณการรับส่งข้อมูลที่เพิ่มขึ้นอย่างรวดเร็วจะทำให้ CPU เพิ่มขึ้นอย่างรวดเร็วน้อยลงเมื่อเวลาผ่านไป และค่าเฉลี่ยการโหลดของเซิร์ฟเวอร์และ CPU จะลดลง ขนาดกระบวนการ PHP-FPM โดยเฉลี่ยขึ้นอยู่กับเว็บเซิร์ฟเวอร์และต้องมีการกำหนดค่าด้วยตนเอง ดังนั้นจึงมีผู้จัดการกระบวนการอัตโนมัติมากขึ้น พลวัต и ตามความต้องการ - เป็นที่นิยมมากขึ้น ฉันหวังว่าบทความนี้จะมีประโยชน์
DUP เพิ่มแผนภูมิมาตรฐาน
ที่มา: will.com