Linux'ta maksimum soket sayısı


12

Sunucu ~ 32720 soket ile sınırlı görünüyor ... Bu limiti yükseltmek için bilinen her değişken değişikliği denedim. Ancak sunucu hala 4Go boş bellek ve boşta işlemcinin% 80'i olsa bile 32720 açık sokette sınırlı kalıyor ...

İşte yapılandırma

~# 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

Düşüncesi olan var mı ? (Şimdiye kadar şanssız yığın taşması ile ilgili bu soru soruldu)




Göndermeden önce bu konuları kontrol ettim, şanssız
TheSquad

Yanıtlar:



2

Bunun için yanlış yere bakıyorsunuz; bir kullanıcı sınırına girmiyorsanız, 32 bitlik bir sistemde genellikle 2'nin 15. gücü olan bir sistem sınırıyla karşılaşıyorsunuz, bu da sisteminizi tahmin ediyorum. Kontrol:

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

Ama bunu siz de değiştirebilirsiniz; mutlak bir üst sınır olarak 2 ** 22 olacak 32 bitlik bir makinede, bu yüzden:

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

Nasıl gittiğini bilmek isterdim.


pid_max zaten
999999'da

1

Bağlantıları açabileceğiniz maksimum soket sayısına bakmaya çalışıyorsanız, cat / proc / sys / net / ipv4 / ip_local_port_range; bu, çekirdeğin giden soketler için kullanacağı bağlantı noktası aralığıdır ve dağıtımınıza bağlı olarak farklı varsayılan değerlere sahiptir. '1024 65535' gibi bir şeye ayarlamak, alabileceğiniz kadar geniş açıktır; bunun bir şeylere yardım edip etmediğine bakın.


ip_local_port_range halihazırda 1024
65535'te

0

Konu benzer bir şey söyleniyor, üzgünüm, ama şimdi onları okumak için zamanım yok: <

İlk bakışta, bahsettiğiniz soket sayısının maksimum kullanıcı işlemlerinin yarısı kadar olduğunu görüyorum. Tahmin edebileceğiniz gibi her soket için ayrı bir işleminiz var (muhtemelen bir sunucu veya bunun gibi bir şey çalıştırıyorsunuz)

Yapabileceğiniz şey, soketin sınırına bir sonraki erişiminizde işlem sayısını kontrol etmektir.

Sadece bir fikir, yardımcı olup olmadığını bilmiyorum.


hayır, o değil: # ps -ef | grep -c 'root' = 147
TheSquad

kontrollü ortam altında mı? bazı kontroller yapabilir misin? örneğin, her istekte kaç işlem oluşturulur? Ayrıca, sunucunun önceliği nedir? Eğer karar verirsen bir şey değiştirir mi? Değilse, o zaman süreç sınırı veya bir süreç içinde iş parçacığı sınırı ulaşmak neredeyse eminim:>
Nikolaidis Fotis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.