Backlog การฟังซ็อกเก็ตเซิร์ฟเวอร์ของคุณถูกจำกัดไว้ที่ 100 การเชื่อมต่อ

ฉันเรียกใช้แอปขวดบน uwsgi ฉันใช้หัวหน้างานเพื่อจัดการกระบวนการ uwsgi ฉันพบบันทึกบอกว่า

Backlog การฟังซ็อกเก็ตเซิร์ฟเวอร์ของคุณถูกจำกัดไว้ที่ 100 การเชื่อมต่อ

จะเอาชนะข้อจำกัดการเชื่อมต่อ 100 รายการได้อย่างไร? สคริปต์ที่ทำงานของฉันเป็นดังนี้:

[program:myapp]
command=uwsgi --master -s /tmp/app.sock --module myapp:app --processes 2 -H /srv/sites/mysite chmod-socket 666 --enable-threads

person shoujs    schedule 09.09.2012    source แหล่งที่มา
comment
คุณแน่ใจหรือว่านั่นคือสิ่งที่คุณต้องทำ? หากคุณสะสมการเชื่อมต่อที่ค้างอยู่ 100 รายการ คุณจะต้องใช้ความจุของคุณอย่างน้อยประมาณ 99% จากนั้นการเพิ่มขีดจำกัดจะทำให้คุณมีพื้นที่หายใจน้อยที่สุดเท่านั้น ก่อนที่จำนวนการเชื่อมต่อขาเข้าจะเกินจำนวนที่คุณสามารถให้บริการได้ จะมีประสิทธิผลมากกว่ามากหากทราบว่าคุณสามารถให้บริการตามคำขอได้เร็วขึ้นได้อย่างไร   -  person hmakholm left over Monica    schedule 09.09.2012


คำตอบ (4)


โปรดทราบว่า "listen backlog" ของการเชื่อมต่อ 100 รายการไม่ได้หมายความว่าเซิร์ฟเวอร์ของคุณสามารถจัดการการเชื่อมต่อพร้อมกันได้ 100 รายการ (หรือทั้งหมด) เท่านั้น ซึ่งจะขึ้นอยู่กับจำนวนกระบวนการหรือเธรดที่กำหนดค่าไว้แทน Listen Backlog คือการตั้งค่าซ็อกเก็ตที่บอกเคอร์เนลถึงวิธีการจำกัดจำนวนการเชื่อมต่อที่ค้างอยู่ (ที่ยังไม่ได้รับการยอมรับ) ในคิวการฟังของซ็อกเก็ตการฟัง หากจำนวนการเชื่อมต่อที่ค้างอยู่เกินขนาดที่ระบุ การเชื่อมต่อใหม่จะถูกปฏิเสธโดยอัตโนมัติ เซิร์ฟเวอร์ที่ทำงานและให้บริการการเชื่อมต่อเป็นประจำไม่ควรต้องมีงานค้างขนาดใหญ่

ตามคู่มือ คุณสามารถเปลี่ยนรายการเพลงที่ค้างในการฟังได้ด้วยตัวเลือก -l:

-l|--listen <num>
       set  socket  listen queue to <n> (default 100, maximum is system
       dependent)
person user4815162342    schedule 09.09.2012

เพียงเพิ่มรายการค้างในการฟังของ uwsgi โดยใช้ตัวเลือก -l หรือ --listen (ตามที่ชี้โดย user4815162342) ขณะเริ่มต้นเซิร์ฟเวอร์ ค่าที่มากกว่า 128 อาจหยุด uwsgi ไม่ให้เริ่มทำงาน นอกจากนี้ยังมีขีดจำกัดระดับระบบบนซ็อกเก็ต Unix และคิวการฟังการเชื่อมต่อ TCP ซึ่งมีค่าเริ่มต้นคือ 128 ซึ่งจำเป็นต้องเพิ่ม

คุณสามารถตรวจสอบการตั้งค่าดังกล่าวได้ดังนี้:

cat /proc/sys/net/core/somaxconn

uwsgi ได้รับการแพตช์ ดังนั้นหากค่าที่ส่งไปยังพารามิเตอร์ --listen ในขณะที่เริ่มต้น uwsgi นั้นมากกว่า ขีดจำกัดระดับระบบ จะทำให้ uwsgi ล้มเหลวอย่างหนัก หากคุณต้องการตั้งค่าขีดจำกัดการฟังของ uwsgi ให้มากกว่าขีดจำกัดระดับระบบ คุณต้องเพิ่มขีดจำกัดของเคอร์เนลก่อน ซึ่งสามารถทำได้โดยใช้คำสั่งต่อไปนี้:

$ echo 4096 > /proc/sys/net/core/somaxconn

Or

$ sysctl -w net.core.somaxconn=4096

หรือเพิ่ม net.core.somaxconn=4096 ไปที่ /etc/sysctl.conf เพื่อให้คงอยู่ผ่านการรีบูต

person Nabeel Ahmed    schedule 06.04.2016

ตามที่อธิบายไว้ในคำตอบก่อนหน้า:

  1. เพิ่มการเชื่อมต่อในเคอร์เนล
  2. เพิ่มการเชื่อมต่อใน uWSGI ด้วย

ตัวอย่าง หากคุณใช้ นักเทียบท่า และ นักเทียบท่าเขียน

  1. วิธีเพิ่มการเชื่อมต่อในเคอร์เนล

ใน docker-compose.yml ในบล็อกที่คุณอธิบายวิธีเรียกใช้ uWSGI:

uwsgi_runner:
    <<: *app-base
    command: /usr/local/bin/uwsgi --ini /app/uwsgi.ini
    # ... other settings ...
    sysctls:
        net.core.somaxconn: 1024 # set max connections to 1024 in kernel
  1. วิธีเพิ่มการเชื่อมต่อใน uWSGI

In uwsgi.ini:

[uwsgi]
# ... other settings ...
listen = 1024 # set max connections to 1024 in uWSGI

นอกจากนี้ คุณสามารถเปลี่ยนพารามิเตอร์นี้ได้โดยตรงใน คำสั่ง docker-compose (แฟล็ก -l หรือ --listen) หากคุณไม่ได้ใช้ไฟล์การตั้งค่า uwsgi.ini:

uwsgi_runner:
    <<: *app-base
    command: /usr/local/bin/uwsgi -l 1024 #other-parameters-here
person Denis Krumko    schedule 23.07.2018
comment
หากต้องการคำตอบที่สมบูรณ์แบบ โปรดอธิบายวิธีเพิ่มการเชื่อมต่อในเคอร์เนลตามที่คุณเขียน - person Baptiste Mille-Mathias; 23.07.2018
comment
การตั้งค่า net.core.somaxconn: 1024 เป็นขั้นตอนหนึ่งในการเพิ่มการเชื่อมต่อในเคอร์เนล หากสภาพแวดล้อมของคุณทำงานในนักเทียบท่า - person Denis Krumko; 24.07.2018
comment
สวัสดีเดนิส แก้ไขคำตอบของคุณ อย่าตอบในแบบฟอร์มความคิดเห็น ขอบคุณ :) - person Baptiste Mille-Mathias; 24.07.2018

คุณสามารถแก้ไข SOMAXCONN ใน /proc/sys/net/core/somaxconn ของคุณเพื่อเพิ่มขีดจำกัดนี้

มันเป็นเพียงระบบปรับแต่งลินุกซ์

person Lujeni    schedule 10.09.2012