ปรับแต่ง nginx worker_process เพื่อรับ 100k hit ต่อนาที


115

เรามีเซิร์ฟเวอร์ที่ให้บริการไฟล์ html หนึ่งไฟล์

ตอนนี้เซิร์ฟเวอร์มี 2 CPU และ 2GB ของ ram จาก blitz.io เราได้รับการเชื่อมต่อประมาณ 12k ต่อนาทีและทุกที่จาก 200 ไทม์เอาต์ใน 60 วินาทีนั้นพร้อม 250 การเชื่อมต่อพร้อมกันในแต่ละวินาที

worker_processes  2;

events {
 worker_connections 1024;
}

ถ้าฉันเพิ่มระยะหมดเวลาเวลาตอบสนองจะเริ่มคืบคลานขึ้นมาภายในหนึ่งวินาที

ฉันจะทำอะไรได้อีกเพื่อบีบน้ำออกจากสิ่งนี้

คำตอบ:


188

ไฟล์กำหนดค่า:

worker_processes  4;  # 2 * Number of CPUs

events {
    worker_connections  19000;  # It's the key to high performance - have a lot of connections available
}

worker_rlimit_nofile    20000;  # Each connection needs a filehandle (or 2 if you are proxying)


# Total amount of users you can serve = worker_processes * worker_connections

ข้อมูลเพิ่มเติม: การเพิ่มประสิทธิภาพ nginx สำหรับปริมาณการใช้งานสูง


14
ฉันคิดว่าสมการที่ให้ไว้สำหรับจำนวนผู้ใช้ทั้งหมดต่อวินาทีนั้นไม่ถูกต้อง แทนที่จะเป็นจำนวนผู้ใช้โดยเฉลี่ยที่ให้บริการต่อวินาทีควรเป็น = worker_processes * worker_connections / (keepalive_timeout * 2) ดังนั้นไฟล์ conf ด้านบนสามารถเซิร์ฟเวอร์ ~ 7.6K การเชื่อมต่อต่อวินาทีซึ่งสูงกว่าที่ @ablemike ต้องการ อย่างไรก็ตาม worker_rlimit_nofile เป็นคำสั่งที่ดีที่จะใช้หาก ulimit มีข้อ จำกัด และคุณไม่ต้องการแก้ไข
Ethan

2
@ อีธานทำไมต้องเบี่ยง 2? หากทุกวินาทีเราได้รับการเชื่อมต่อใหม่ 100 ครั้งและหมดเวลาคือ 5 จากนั้นก้าวไปด้วยวินาทีที่หกเราจะมีการเชื่อมต่อ 5 * 100 อย่างต่อเนื่องที่ยังไม่สิ้นสุดในฝั่งเซิร์ฟเวอร์ เราอาจมีน้อยลงหากผู้ใช้บางคนยกเลิกการเชื่อมต่อด้วยตัวเอง
Bulat

3
ว่าสูตรไม่ทำงานถ้า keepalive ถูกตั้งค่าให้ 0s (คนพิการ)
Tilo

5
การเชื่อมต่อแต่ละครั้งต้องการการจัดการไฟล์ 2 ไฟล์แม้กระทั่งไฟล์แบบคงที่เช่นรูปภาพ / JS / CSS นี่คือ 1 สำหรับการเชื่อมต่อของไคลเอ็นต์และตัวที่ 2 สำหรับการเปิดไฟล์แบบคงที่ ดังนั้นการเปลี่ยน worker_rlimit_nofile = 2 * worker_connections จะปลอดภัยกว่า
Ethan

4
ใช้ worker_rlimit_nofile แต่ควรเรียก 'ulimit -n' เพื่อตั้งค่าจำนวนไฟล์ที่เปิดต่อกระบวนการ สิ่งนี้ทำได้ดีกว่าในสคริปต์ init
Ethan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.