การตั้งค่า PHP-FPM: ใช้ pm static เพื่อประสิทธิภาพสูงสุด

การตั้งค่า PHP-FPM: ใช้ pm static เพื่อประสิทธิภาพสูงสุด

บทความนี้มีเวอร์ชันที่ไม่มีการแก้ไขเผยแพร่ครั้งแรกเมื่อ เฮย์เดนเจมส์.io และเผยแพร่ที่นี่โดยได้รับอนุญาตจากเธอ นักบิน.

ฉันจะบอกคุณโดยสรุปว่าวิธีที่ดีที่สุดในการกำหนดค่า 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.conf.

ความคล้ายคลึงกันระหว่างตัวจัดการกระบวนการ PHP-FPM และตัวควบคุมความถี่ของ CPU

นี่อาจดูไม่ตรงประเด็น แต่ฉันจะเชื่อมโยงสิ่งนี้กับหัวข้อการกำหนดค่า PHP-FPM ใครบ้างที่ไม่เคยประสบปัญหาโปรเซสเซอร์ช้าลงอย่างน้อยหนึ่งครั้ง บนแล็ปท็อป เครื่องเสมือน หรือเซิร์ฟเวอร์เฉพาะ จำการปรับขนาดความถี่ CPU ได้ไหม ตัวเลือกเหล่านี้มีให้สำหรับ nix และ Windows สามารถปรับปรุงประสิทธิภาพและการตอบสนองของระบบโดยเปลี่ยนการตั้งค่าคันเร่งของโปรเซสเซอร์จาก ตามความต้องการ บน ผลงาน*. คราวนี้เรามาเปรียบเทียบคำอธิบายและดูความคล้ายคลึงกัน:

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

สำหรับรายละเอียด โปรดดู รายการพารามิเตอร์ควบคุมความถี่โปรเซสเซอร์ทั้งหมด.

เห็นความคล้ายคลึงกันไหม? ฉันต้องการแสดงการเปรียบเทียบนี้เพื่อโน้มน้าวคุณว่าควรใช้ดีที่สุด น. คงที่ สำหรับ PHP-FPM

สำหรับพารามิเตอร์ตัวควบคุมโปรเซสเซอร์ การปฏิบัติ ช่วยเพิ่มประสิทธิภาพได้อย่างปลอดภัยเพราะเกือบทั้งหมดขึ้นอยู่กับขีดจำกัด CPU ของเซิร์ฟเวอร์ นอกจากนี้ แน่นอนว่ายังมีปัจจัยต่างๆ เช่น อุณหภูมิ การชาร์จแบตเตอรี่ (ในแล็ปท็อป) และผลข้างเคียงอื่นๆ จากการที่โปรเซสเซอร์ทำงานอย่างต่อเนื่องที่ 100% การตั้งค่าประสิทธิภาพช่วยให้มั่นใจได้ถึงประสิทธิภาพของโปรเซสเซอร์ที่เร็วที่สุด อ่านเช่นเกี่ยวกับ พารามิเตอร์ force_turbo ใน Raspberry Piโดยที่แผง RPi จะใช้ตัวควบคุม การปฏิบัติโดยการปรับปรุงประสิทธิภาพจะสังเกตเห็นได้ชัดเจนยิ่งขึ้นเนื่องจากความเร็วสัญญาณนาฬิกาของ CPU ต่ำ

การใช้ pm แบบคงที่เพื่อให้ได้ประสิทธิภาพเซิร์ฟเวอร์สูงสุด

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

การตั้งค่า PHP-FPM: ใช้ pm static เพื่อประสิทธิภาพสูงสุด

ในภาพหน้าจอด้านบน เซิร์ฟเวอร์มี 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 และจำนวนคำขอต่อวินาที

ภาพหน้าจอแสดงคำสั่ง ลินุกซ์ชั้นนำกรองโดยคุณ (ผู้ใช้) และชื่อผู้ใช้ PHP-FPM แสดงเฉพาะกระบวนการ 50 กระบวนการแรกเท่านั้น (ฉันไม่ได้นับทั้งหมด) แต่โดยพื้นฐานแล้ว top จะแสดงสถิติสูงสุดที่พอดีกับหน้าต่างเทอร์มินัล ในกรณีนี้ จัดเรียงตาม % CPU (%CPU) หากต้องการดูกระบวนการ PHP-FPM ทั้งหมด 100 กระบวนการ ให้รันคำสั่ง:

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

ลองเปลี่ยนพารามิเตอร์แล้วข้อผิดพลาดจะไม่หายไปเช่น อธิบายไว้ในโพสต์นี้ใน Serverfault. ในกรณีนี้ ค่า pm.min น้อยเกินไป และเนื่องจากปริมาณการเข้าชมเว็บแตกต่างกันมาก และมีจุดสูงสุดและหุบเขาลึก จึงเป็นเรื่องยากที่จะปรับ pm อย่างเพียงพอ พลวัต. ปกติจะใช้ pm ตามความต้องการ, ตามคำแนะนำในโพสต์เดียวกัน. แต่ที่เลวร้ายยิ่งกว่านี้เพราะว่า ตามความต้องการ ยุติกระบวนการที่ไม่ได้ใช้งานให้เป็นศูนย์เมื่อมีการรับส่งข้อมูลเพียงเล็กน้อยหรือไม่มีเลย และคุณจะยังคงมีค่าใช้จ่ายในการเปลี่ยนแปลงการรับส่งข้อมูล นอกเสียจากว่าคุณจะตั้งเวลารอไว้มาก แล้วใช้เลยดีกว่า น.คงที่ + จำนวนสูง pm.max_requests.

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 เพิ่มแผนภูมิมาตรฐาน ab. หากกระบวนการ PHP-FPM อยู่ในหน่วยความจำ ประสิทธิภาพจะเพิ่มขึ้นโดยสิ้นเปลืองหน่วยความจำเมื่อนั่งรอ ค้นหาตัวเลือกที่ดีที่สุดสำหรับตัวคุณเอง

การตั้งค่า PHP-FPM: ใช้ pm static เพื่อประสิทธิภาพสูงสุด

ที่มา: will.com

เพิ่มความคิดเห็น