ฉันพยายามทดสอบการโหลดบน MQTT จาก MACOS ของฉัน และสามารถบรรลุการเชื่อมต่อมากกว่า 12k ได้สำเร็จจนกระทั่งแบนด์วิธของฉันหมดลง
ฉันพยายามทำการทดสอบเดียวกันบนเครื่อง GCP และมันทำให้ฉันมีข้อยกเว้นการหมดเวลาการเชื่อมต่อเมื่อพอร์ตที่เปิดถึง 2048 และ 2048 การเชื่อมต่อกับนายหน้า MQTT
เมื่อเชื่อมต่อ ConnectionTimeout ของฉันคือ 100 วินาที (รอ conack) และ KeepAlive = 300 วินาที (เมื่อสร้างการเชื่อมต่อแล้ว)
ปัญหานี้เกิดขึ้นโดยไม่คำนึงถึงซอฟต์แวร์ทดสอบการโหลด เช่น mzbench, jmeter และ emqtt-bench ฉันคิดว่าปัญหานี้เกี่ยวข้องกับเซิร์ฟเวอร์ลินุกซ์
ฉันไม่ต้องการบรรลุการเชื่อมต่อแบบเปิด 1 ล้านครั้ง แต่กำลังมองหาการเชื่อมต่อแบบเปิดอย่างน้อย 30K
ได้ลองเปลี่ยน ulimit แล้วและนี่คือการกำหนดค่า ulimit ของฉัน
ขนาดไฟล์หลัก (บล็อก, -c) 0
ขนาด data seg (kbytes, -d) ไม่จำกัด
การจัดลำดับความสำคัญ (-e) 0
ขนาดไฟล์ (บล็อก, -f) ไม่จำกัด
สัญญาณที่รอดำเนินการ (-i) 63887
หน่วยความจำสูงสุดที่ล็อกไว้ (kbytes, -l) 64
ขนาดหน่วยความจำสูงสุด (kbytes, -m) ไม่จำกัด
เปิดไฟล์ (-n) 102400
ขนาดไปป์ (512 ไบต์, -p) 8
คิวข้อความ POSIX (ไบต์, -q) 819200
ลำดับความสำคัญตามเวลาจริง (-r) 0
ขนาดสแต็ก (kbytes, -s) 8192
เวลาซีพียู (วินาที, -t) ไม่จำกัด
กระบวนการของผู้ใช้สูงสุด (-u) 200,000
หน่วยความจำเสมือน (kbytes, -v) ไม่จำกัด
ล็อคไฟล์ (-x) ไม่จำกัด
cat on proc ยังให้ไฟล์สูงสุดที่เปิดเป็น 102400
สิ่งเหล่านี้เป็นค่าที่ตั้งไว้ใน sysctl ของฉัน
fs.file-max = 200,000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_mem = 50576 64768 98152
net.core.netdev_max_backlog = 2500
แก้ไข: เพิ่มรายละเอียดเครื่องจักรและรูปแบบการทดสอบ
ประเภทเครื่อง: n2-highcpu-16 (16 vCPU, หน่วยความจำ 16 GB)
ผลลัพธ์ของ lscpu
สถาปัตยกรรม: x86_64
โหมดการทำงานของ CPU: 32 บิต 64 บิต
ลำดับไบต์: Little Endian
ซีพียู: 16
รายการ CPU ออนไลน์: 0-15
เธรดต่อคอร์: 2
คอร์ต่อซ็อกเก็ต: 8
ซ็อกเก็ต: 1
โหนด NUMA: 1
ID ผู้จำหน่าย: GenuineIntel
ซีพียูตระกูล: 6
รุ่น: 85
ชื่อรุ่น: Intel(R) Xeon(R) CPU
ก้าว: 7
ซีพียู MHz: 2800.200
BogoMIPS: 5600.40
ผู้จำหน่ายไฮเปอร์ไวเซอร์: KVM
ประเภทการจำลองเสมือน: เต็ม
แคช L1d: 32K
แคช L1i: 32K
แคช L2: 1024K
แคช L3: 33792K
NUMA node0 CPU: 0-15
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves arat avx512_vnni md_clear arch_capabilities
รูปแบบการทดสอบ:
เปิด 200 การเชื่อมต่อต่อวินาทีและรอการบรรจุในอัตราคงที่