SO_LINGER, kapatma vb rağmen Time_Wait binlerce

2 Cevap php

Ben (biz dakika başına ~ 600 almak umuduyla), aynı anda birçok URL'leri bağlanan bir site üzerinde çalışıyorum ve ben deneyin ne olursa olsun, Time_Wait binlerce hala açık her zaman vardır. Ben bu TCP bağlantıları için hayati anlamak, ama hepsi mevcut portları kullanıyor. PHP SO_REUSEPORT yoktur ve SO_REUSEADDR uzaktan bağlantı ile çalışmıyor. İşte kod başlangıcı:

$s = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($s, SOL_SOCKET, SO_LINGER,array('l_linger'=>0, 'l_onoff'=>0)); //I have tried l_onoff=1 
socket_set_option($s, SOL_SOCKET, SO_RCVTIMEO,array('sec'=>0,'usec'=>500000));
socket_set_option($s, SOL_SOCKET, SO_SNDTIMEO,array('sec'=>0,'usec'=>500000));
socket_set_option($s, SOL_SOCKET, SO_KEEPALIVE,0);
socket_set_option($s, SOL_SOCKET, SO_REUSEADDR,1);
socket_set_nonblock($s);
socket_bind($s,$ip,0);
socket_connect($s,$host,$port);

$ S bir dizi tüm bekleyen biz socket_shutdown dediğimiz bir yazılmasından sonra, yazar içerir gider ($ s, 1); soket üzerinde yazılı kapatın. Sonra okuduktan sonra biz:

socket_shutdown($s,2); socket_close($s);

Tüm okuma ve yazma bir süre döngü yapılır, döngü o vurmak değilse, o zaman üzerinde hareket eder ve diziye başka bir URL eklemek için ilerler, 12 eşzamanlı bağlantı bir max. Her döngü aramaları 0 bir zaman aşımı ile socket_select.

Herkes herhangi bir öneriniz var mı? Ben hızını artırmak hem de TIME_WAIT en netstat görünmesini azaltmak istiyorum.

Thanks, James Hartig

2 Cevap

Bunu size isteği gönderir sonra sunucu, bir TCP FIN göndermek neden olur isteğiniz ile birlikte HTTP başlığını Connection: close gönderebilir. Diğer tarafı ilk FIN gönderir, çünkü sen, Time_Wait etrafında beklemek alır diğer tarafı değildir olacak.

Eğer azaltmak istiyorsanız TIME_WAIT Linux üzerinde, bir proc ayarı değiştirebilirsiniz:

echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

Bu 30 saniye zaman aşımı değişecektir. O TIME_WAIT standart TCP / IP davranışlarının bir parçası Not - Eğer gerçekten kaynak sıkıntısı sürece, ben bu kadar ile muck olmaz.