ฉันควรทำอย่างไรหากเซิร์ฟเวอร์ Nginx มีโหลด CPU สูงและมีการใช้งานหน่วยความจำในการประมวลผล

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

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

การวิเคราะห์สาเหตุของการโหลด Nginx มากเกินไป

ฉันควรทำอย่างไรหากเซิร์ฟเวอร์ Nginx มีโหลด CPU สูงและมีการใช้งานหน่วยความจำในการประมวลผล

ก่อนอื่น เราต้องคิดก่อนว่าเหตุใด 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 จึงใช้ทรัพยากรจำนวนมาก เราต้องเริ่มต้นด้วยการกำหนดค่าและปรับให้เหมาะสมทีละขั้นตอน

วิธีการกำหนดค่า

  1. เปิดไฟล์การกำหนดค่า Nginx: โดยปกติไฟล์การกำหนดค่าหลักของ Nginx จะอยู่ที่ /etc/nginx/nginx.conf.

  2. ติดตั้ง 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 จำนวนมาก คุณอาจต้องใช้เครื่องมือบางอย่างสำหรับการวิเคราะห์เชิงลึก

使用 tophtop ดูการใช้ทรัพยากรแบบเรียลไทม์ของกระบวนการโดย 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 ของเรา!

แชร์และกดไลค์ถ้าคุณชอบ! การแชร์และการถูกใจของคุณคือแรงบันดาลใจอย่างต่อเนื่องของเรา!

 

发表评论

ที่อยู่อีเมลของคุณจะไม่ถูกเผยแพร่ 必填项已用 * 标注

เลื่อนไปที่ด้านบน