Тысячи TIME_WAIT несмотря на SO_LINGER, завершите работу и т.д.

Я работаю над сайтом, который соединяется со многими URL сразу, (мы надеемся добраться до ~600 в минуту), и независимо от того, что я пробую, всегда существуют тысячи TIME_WAIT, все еще открываются. Я понимаю, что они жизненно важны для соединений TCP, но они используют все доступные порты. PHP не имеет SO_REUSEPORT, и SO_REUSEADDR не работает с удаленными соединениями. Вот начало кода:

$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 входит в массив, содержит все незаконченные записи, после записи, которую мы называем socket_shutdown ($s, 1); закрыть запись на сокете. Затем после чтения мы:

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

Во всем чтении и записи выполняют некоторое время цикл, цикл имеет макс. из 12 параллельных соединений, если это не поражено, то это идет дальше и продолжает добавлять другой URL к массиву. Каждый цикл называет socket_select с тайм-аутом 0.

У кого-либо есть какие-либо предложения? Я хотел бы увеличить скорость, а также уменьшить TIME_WAIT, которые появляются в netstat.

Спасибо, James Hartig

5
задан James Hartig 22 January 2010 в 01:43
поделиться