จำนวนซ็อกเก็ตสูงสุดบน Linux


12

ดูเหมือนว่าเซิร์ฟเวอร์นั้น จำกัด อยู่ที่ ~ 32720 ซ็อกเก็ต ... ฉันได้ลองใช้การเปลี่ยนแปลงที่รู้จักทุกครั้งเพื่อเพิ่มขีด จำกัด นี้ แต่เซิร์ฟเวอร์นั้น จำกัด อยู่ที่ซ็อกเก็ตที่เปิด 32720 แม้ว่าจะยังมี 4Go ของหน่วยความจำฟรีและ 80% ของ CPU ที่ไม่ได้ใช้งาน ...

นี่คือการกำหนดค่า

~# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 63931
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 798621
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 2048
cpu time               (seconds, -t) unlimited
max user processes              (-u) 63931
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

net.netfilter.nf_conntrack_max = 999999
net.ipv4.netfilter.ip_conntrack_max = 999999
net.nf_conntrack_max = 999999

ความคิดใด ๆ (คำถามนี้ตามที่ถูกถามใน stack-overflow ที่ไม่มีโชคมาก่อน)


serverfault.com/questions/10852/มีข้อมูลที่ดีบางอย่าง
sysadmin1138

เช่นเดียวกับstackoverflow.com/questions/410616/...
sysadmin1138

ฉันตรวจสอบกระทู้เหล่านั้นก่อนโพสต์โดยไม่มีโชค
TheSquad

คำตอบ:


8

ฉันพบสิ่งที่ จำกัด ทุกอย่าง:

max_map_count

ขอบคุณทุกคนที่ตอบกลับ!


ซ็อกเก็ตจึงเป็นปลาเฮอริ่งแดง ดีแล้วที่รู้.
pjz

คุณมีวิธีการเปลี่ยนมันได้หรือไม่? คุณมีเอกสารที่อธิบายถึงสิ่งที่ทำหรือไม่
Ryan Shillington


2

คุณกำลังมองหาสถานที่ที่ผิดสำหรับคนนี้; คุณไม่ได้ใช้งานเกินขีด จำกัด ของผู้ใช้คุณกำลังใช้งานขีด จำกัด ของระบบซึ่งโดยทั่วไปแล้วจะเป็นพลังงานที่ 15 ของ 2 ในระบบ 32 บิตซึ่งเป็นสิ่งที่ฉันคาดเดาว่าระบบของคุณจะเป็น ตรวจสอบ:

 % cat /proc/sys/kernel/pid_max 
 32768
 %

แต่คุณสามารถเปลี่ยนแปลงสิ่งนั้นได้เช่นกัน บนเครื่อง 32- บิตที่จะเป็น 2 ** 22 เป็นขีด จำกัด บนแน่นอนดังนั้น:

% sudo bash -c 'echo 4194303 > /proc/sys/kernel/pid_max'
%

ฉันสนใจที่จะรู้ว่าคุณไปอย่างไร


pid_max มีอยู่ที่ 999999
TheSquad

1

หากคุณกำลังพยายามดูจำนวนซ็อกเก็ตสูงสุดที่คุณสามารถเปิดการเชื่อมต่อด้วยคุณอาจลองดู cat / proc / sys / net / ipv4 / ip_local_port_range นี่คือช่วงของพอร์ตที่เคอร์เนลจะใช้สำหรับซ็อกเก็ตขาออกและมีค่าเริ่มต้นต่าง ๆ ตามการกระจายของคุณ การตั้งค่าเป็น '1024 65535' นั้นเปิดกว้างพอ ๆ กับที่คุณจะได้รับ ดูว่ามันช่วยอะไรได้ไหม


ip_local_port_range มีอยู่แล้วที่ 1024 65535
TheSquad

0

ฉันขอโทษถ้าสิ่งที่คล้ายกันถูกพูดในหัวข้อ แต่ฉันไม่มีเวลาอ่านตอนนี้: <

ด้วยรูปลักษณ์แรกฉันเห็นว่าจำนวนซ็อกเก็ตที่คุณพูดถึงเป็นครึ่งหนึ่งของกระบวนการผู้ใช้สูงสุด ในขณะที่ฉันสามารถเดาได้ว่าคุณมีกระบวนการแยกต่างหากสำหรับซ็อกเก็ตทุกอัน (คุณอาจเรียกใช้เซิร์ฟเวอร์หรืออะไรทำนองนั้น)

สิ่งที่คุณสามารถทำได้คือการตรวจสอบจำนวนกระบวนการในครั้งถัดไปที่คุณถึงขีด จำกัด ของซ็อกเก็ต

แค่ความคิดฉันไม่รู้ว่ามันช่วยได้ไหม


ไม่ไม่ใช่: # ps -ef | grep -c 'root' = 147
TheSquad

ภายใต้สภาพแวดล้อมที่มีการควบคุมคืออะไร? คุณสามารถตรวจสอบได้ไหม? ตัวอย่างเช่นมีกี่กระบวนการที่สร้างขึ้นพร้อมกับทุกคำขอ นอกจากนี้เซิร์ฟเวอร์มีความสำคัญเป็นอย่างไร? หากคุณเปลี่ยนมันจะเปลี่ยนบางอย่าง? ถ้าไม่เช่นนั้นฉันเกือบแน่ใจว่าคุณถึงขีด จำกัด กระบวนการหรือขีด จำกัด เธรดภายในกระบวนการ:>
Nikolaidis Fotis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.