Score:1

เซิร์ฟเวอร์ Linux ไม่อนุญาตให้มีการเชื่อมต่อพร้อมกันมากกว่า 2048

ธง in

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

jp flag
คุณใช้เครื่องประเภทใด คุณสร้างการเชื่อมต่อทั้งหมดของคุณเร็วแค่ไหน?
in flag
@SerhiiRohoza ได้แก้ไขคำถามและเพิ่มรายละเอียดที่ถาม
Matthew Ife avatar
jo flag
คุณสามารถให้ข้อมูลเพิ่มเติมเกี่ยวกับโบรกเกอร์ที่คุณใช้บน Linux ได้หรือไม่?
in flag
@MatthewIfe ใช่ โบรกเกอร์ที่ฉันใช้อยู่บนลินุกซ์ด้วย อย่างไรก็ตาม ฉันไม่คิดว่ามันควรจะเป็นสาเหตุหลักเนื่องจากฉันสามารถเปิดการเชื่อมต่อ 12k จากในเครื่องของฉันได้ แต่มีเพียงการเชื่อมต่อ 2k จากเซิร์ฟเวอร์ทดสอบของฉันเท่านั้น
Matthew Ife avatar
jo flag
ฉันสนใจในการติดตั้งใช้งานซอฟต์แวร์ที่คุณใช้ เนื่องจากกลไกต่างๆ ของการทำงานพร้อมกันมีขีดจำกัดที่แตกต่างกัน นอกจากนี้ ulimits ของคุณในเชลล์ไม่จำเป็นต้องเป็น ulimits ของซอฟต์แวร์ แต่เนื่องจากคุณไม่ได้นำเสนอการใช้งานของโบรกเกอร์ที่คุณใช้หรือวิธีการที่คุณปรับใช้ จึงไม่มีข้อมูลเพียงพอที่จะทำงานด้วย
in flag
โบรกเกอร์ที่ใช้คือโบรกเกอร์ emqx ที่ใช้งานบนเครื่อง gcloud ที่คล้ายกัน Ulimit ที่ให้ไว้ข้างต้นคือ ulimit ของลูกค้าซึ่งพยายามสร้างการเชื่อมต่อกับโบรกเกอร์
John Hanley avatar
cn flag
ฉันอาจคิดผิด แต่ฉันคิดว่า GCP VM ของคุณต้องเปิดพอร์ตพร้อมกันโดยไฟร์วอลล์/เกตเวย์ VPC การเชื่อมต่อใน Google Cloud มีสถานะและติดตามเพื่อให้รับส่งข้อมูลกลับ
John Hanley avatar
cn flag
ประเภทเครื่องที่มี 1 - 8 vCPU จำกัดการเชื่อมต่อ 500 ต่อ vCPU ต่อ 5 วินาที และสูงสุด 4000 สำหรับประเภทเครื่องขนาดใหญ่ https://cloud.google.com/vpc/docs/quota#per_instance ซึ่งไม่ตรงกับเพดาน 2,000 ของคุณ ...
Score:1
ธง in

ฉันสามารถแก้ปัญหานี้ได้ด้วยความคิดเห็นด้านบน

ฉันโดน LoadBalancer IP สาธารณะจาก VM ทดสอบของฉัน อย่างไรก็ตาม GCP มีขีดจำกัดสูงสุด 2048 การเชื่อมต่อจาก VM ไปยัง IP สาธารณะ เมื่อฉันเปลี่ยนเป็น IP ส่วนตัว ฉันสามารถบรรลุการเชื่อมต่อเกือบ 65k

โพสต์คำตอบ

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