ไดเรกทอรีบทความ
จู่ๆ คุณได้ค้นพบในที่ทำงานว่าการใช้งาน CPU ของ Nginx พุ่งสูงขึ้นหรือไม่? ที่แย่กว่านั้นคือกระบวนการของผู้ปฏิบัติงานหลายคนของ Nginx ใช้ทรัพยากรอย่างบ้าคลั่งทุกครั้งที่ฉันดูกระบวนการ
เมื่อเห็นฉากนี้ หัวของคุณก็จะร้อนรุ่ม และอดไม่ได้ที่จะตะโกน: "โอ้พระเจ้า เซิร์ฟเวอร์จะระเบิดเหรอ?" ไม่ต้องกังวล นี่ไม่ได้หมายความว่าเซิร์ฟเวอร์ของคุณจะ "เสร็จสิ้น" แต่ Nginx เราต้องการให้คุณทำการเพิ่มประสิทธิภาพที่ครอบคลุม!
การวิเคราะห์สาเหตุของการโหลด Nginx มากเกินไป

ก่อนอื่น เราต้องคิดก่อนว่าเหตุใด Nginx จึง "หมดแรง" ในทันใดสาเหตุของปัญหามีหลายประการ อย่ากลัว เรามาดูกันดีกว่าด้านล่าง
1. การกำหนดค่าที่ไม่สมเหตุสมผล
ในไฟล์การกำหนดค่า Nginx จุดที่สำคัญที่สุดคือ worker_processes- พารามิเตอร์นี้กำหนดจำนวนกระบวนการที่เริ่มโดย Nginx
- หากคุณกำหนดค่ากระบวนการของผู้ปฏิบัติงานน้อยเกินไป โหลดของ CPU จะเพิ่มขึ้น หากคุณกำหนดค่ามากเกินไป หน่วยความจำจะไม่เพียงพอ
- คุณต้องหาจุดสมดุล เช่นตั้งค่า worker_processes เป็น 1 ถึง 2 เท่าของจำนวนคอร์ CPU.
- ถ้ามี 4 core ก็ลองครับ
worker_processes 4หรือตั้งค่าโดยตรงไปที่auto.
2. การเข้าชมเพิ่มขึ้นอย่างรวดเร็ว
บางครั้งการโหลดของ Nginx พุ่งสูงขึ้นทันทีไม่ใช่เพราะคุณทำผิดพลาด แต่เป็นเพราะจำนวนการเข้าชมสูงเกินไปคำขอเข้าถึงพร้อมกันสูงจะทำให้กระบวนการของผู้ปฏิบัติงาน Nginx ล้นหลามทุกกระบวนการโอเวอร์โหลด CPU และหน่วยความจำก็เต็มเช่นกัน ในเวลานี้ คุณอาจต้องปรับปรุงทรัพยากรเซิร์ฟเวอร์ เช่น การเพิ่มจำนวนคอร์ CPU หรือการเพิ่มหน่วยความจำ แน่นอนว่านี่เป็นสิ่งเตือนใจเช่นกัน อย่าลืมพิจารณาการถ่ายข้อมูล CDN หรือการปรับสมดุลโหลด
3. พบกับการโจมตีที่เป็นอันตราย
การที่ "ได้รับความนิยมอย่างมาก" บนอินเทอร์เน็ตไม่ใช่สิ่งที่ดีเสมอไป การโจมตีที่เป็นอันตรายอาจมุ่งเป้าไปที่คุณได้ตลอดเวลา หากคุณพบว่าการใช้งาน CPU สูงผิดปกติและแหล่งที่มาของคำขอ IP น่าสงสัย เป็นไปได้มากว่าเว็บไซต์ของคุณกำลังประสบปัญหาการโจมตี DDoS ในเวลานี้คุณต้องปรับใช้ไฟร์วอลล์หรือจำกัดความถี่ในการเข้าถึงทันทีเช่นการใช้โมดูลจำกัดปัจจุบันที่มาพร้อมกับ Nginx หรือการตั้งค่าบัญชีดำ IP
วิธีแก้ปัญหาการใช้หน่วยความจำสูงของกระบวนการ Nginx
คำถามก็คือ เหตุใดกระบวนการของผู้ปฏิบัติงาน Nginx จึงใช้ทรัพยากรจำนวนมาก เราต้องเริ่มต้นด้วยการกำหนดค่าและปรับให้เหมาะสมทีละขั้นตอน
วิธีการกำหนดค่า
เปิดไฟล์การกำหนดค่า Nginx: โดยปกติไฟล์การกำหนดค่าหลักของ Nginx จะอยู่ที่
/etc/nginx/nginx.conf.ติดตั้ง
worker_processes: พบในไฟล์กำหนดค่าeventsบล็อกการตั้งค่าworker_processesค่า. ถ้าไม่eventsคุณต้องสร้างบล็อกขึ้นมาnginx events { worker_connections 1024; use epoll; # 或者适用于操作系统的其他事件模型 }
1. ตั้งค่า worker_connections อย่างถูกต้อง
nginx worker_connections พารามิเตอร์กำหนดจำนวนการเชื่อมต่อสูงสุดที่แต่ละกระบวนการของผู้ปฏิบัติงานสามารถจัดการได้ หากมีขนาดเล็กเกินไป จะส่งผลต่อประสิทธิภาพการทำงานพร้อมกัน หากมีขนาดใหญ่เกินไป อาจใช้ทรัพยากรมากเกินไป
จะคำนวณค่าที่เหมาะสมได้อย่างไร?
สมมติว่าคุณมี CPU แบบ 4 คอร์และ RAM ขนาด 16GB จุดเริ่มต้นที่ปลอดภัยก็คือ worker_connections 4096.
แต่หากเว็บไซต์ของคุณมีการเข้าชมจำนวนมาก ให้พิจารณาเพิ่มค่านี้เป็น 8192 เพื่อให้แน่ใจว่าแต่ละกระบวนการสามารถรองรับคำขอได้เพียงพอ
events {
worker_connections 8192;
}
ด้วยวิธีนี้ พลังการประมวลผลของ Nginx จะได้รับการปรับปรุงอย่างมาก
2. ปรับ Keepalive_timeout
พารามิเตอร์สำคัญอีกประการหนึ่งสำหรับ Nginx ในการจัดการคำขอคือ keepalive_timeout.
การตั้งค่านี้จะกำหนดระยะเวลาที่สามารถรักษาการเชื่อมต่อของไคลเอ็นต์กับเซิร์ฟเวอร์ได้
หากตั้งค่าไว้นานเกินไป จะใช้ทรัพยากรการเชื่อมต่อมากเกินไป.
คุณสามารถพยายามที่จะ keepalive_timeout ตั้งค่าเป็น 15 วินาทีเพื่อรักษาการเชื่อมต่อและปล่อยทรัพยากร
keepalive_timeout 15;
3. ปรับขีดจำกัดตัวอธิบายไฟล์ให้เหมาะสม
โดยค่าเริ่มต้นลินุกซ์ ระบบมีการจำกัดจำนวนตัวอธิบายไฟล์ที่สามารถเปิดได้โดยแต่ละกระบวนการ
หาก Nginx ต้องการประมวลผลไฟล์จำนวนมาก (เช่น ทรัพยากรคงที่) คุณอาจเห็น Nginx รายงานข้อผิดพลาด โดยแจ้ง "too many open files"
คุณสามารถผ่าน worker_rlimit_nofile เพิ่มขีดจำกัดตัวอธิบายไฟล์เช่น ตั้งเป็น 65535
worker_rlimit_nofile 65535;
4. เปิดใช้งานแคชและ gzip
การแคชและการบีบอัดเป็นกุญแจสำคัญสองประการในการเพิ่มประสิทธิภาพเว็บไซต์
ด้วยการเปิดใช้งานฟังก์ชันแคชของ Nginx ทรัพยากรแบบคงที่ (เช่น รูปภาพและไฟล์ JS) จะถูกแคชไว้ในหน่วยความจำจึงช่วยลดภาระบนเซิร์ฟเวอร์ได้อย่างมาก
นอกจากนี้ การเปิดฟังก์ชันการบีบอัด gzip จะช่วยลดปริมาณข้อมูลที่ส่งและปรับปรุงความเร็วของเว็บไซต์ได้
gzip on;
gzip_types text/plain application/javascript;
5. วิเคราะห์การใช้ทรัพยากร Nginx
สุดท้ายนี้ หากคุณได้ดำเนินการเพิ่มประสิทธิภาพข้างต้นทั้งหมดแล้ว แต่ Nginx ยังคงใช้ CPU จำนวนมาก คุณอาจต้องใช้เครื่องมือบางอย่างสำหรับการวิเคราะห์เชิงลึก
使用 top 或 htop ดูการใช้ทรัพยากรแบบเรียลไทม์ของกระบวนการโดย strace ติดตามการเรียกของระบบหรือการใช้งาน nmon สร้างรายงานประสิทธิภาพ มีเพียงการวิเคราะห์การทำงานจริงของ Nginx อย่างครอบคลุมเท่านั้นที่เราสามารถปรับจูนได้แม่นยำยิ่งขึ้น
总结
อย่าตกใจเมื่อการใช้งาน CPU ของ Nginx เพิ่มขึ้นอย่างรวดเร็ว อาจเกิดจากการกำหนดค่าที่ไม่เหมาะสมหรือมีการรับส่งข้อมูลมากเกินไป
ผ่านการปรับเปลี่ยนตามสมควร worker_processes และ worker_connectionsด้วยการเปิดใช้งานการแคช การเพิ่มประสิทธิภาพการหมดเวลา และตัวอธิบายไฟล์ คุณสามารถลดแรงกดดันในการโหลดบน Nginx ได้อย่างมาก
Nginx เป็นเว็บเซิร์ฟเวอร์ที่ทรงพลัง ซึ่งเมื่อได้รับการปรับปรุงอย่างเหมาะสม จะสามารถมอบประสิทธิภาพที่ยอดเยี่ยมให้กับเว็บไซต์ของคุณได้
โปรดจำไว้ว่าคำถามใด ๆ สามารถตอบได้โดยวิทยาศาสตร์วิธีการแก้ไข การเพิ่มประสิทธิภาพการทำงานของเซิร์ฟเวอร์ก็ไม่มีข้อยกเว้น
ติดตามและปรับเปลี่ยนได้ทันท่วงทีเป็นกุญแจสำคัญในการทำให้ Nginx ทำงานได้อย่างมีประสิทธิภาพ หากคุณเชี่ยวชาญเทคนิคเหล่านี้ เว็บไซต์ของคุณจะปลอดภัยแม้ต้องเผชิญกับปริมาณการเข้าชมสูงหรือการโจมตีที่เป็นอันตราย
ฉันหวังว่าบทความนี้จะเป็นแรงบันดาลใจให้คุณ รีบมาเพิ่มประสิทธิภาพ Nginx ของคุณกันเถอะ!
หวัง Chen Weiliang บล็อก ( https://www.chenweiliang.com/ ) แบ่งปัน "ฉันควรทำอย่างไรหากโหลด CPU ของเซิร์ฟเวอร์ Nginx และการใช้งานหน่วยความจำกระบวนการสูง" 》มีประโยชน์กับคุณ
ยินดีต้อนรับสู่การแบ่งปันลิงค์ของบทความนี้:https://www.chenweiliang.com/cwl-32093.html
หากต้องการปลดล็อคเคล็ดลับที่ซ่อนอยู่เพิ่มเติม ยินดีต้อนรับเข้าร่วมช่อง Telegram ของเรา!
แชร์และกดไลค์ถ้าคุณชอบ! การแชร์และการถูกใจของคุณคือแรงบันดาลใจอย่างต่อเนื่องของเรา!