Home
Objective Caml
ocaml@conference.jabber.ru
Среда, 30 сентября 2009< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся! | release crap
Конфигурация комнаты

GMT+4
[01:05:28] sevenov вышел(а) из комнаты
[01:06:43] sevenov вошёл(а) в комнату
[01:07:28] sevenov вышел(а) из комнаты
[01:07:49] sevenov вошёл(а) в комнату
[01:08:36] ygrek вышел(а) из комнаты
[02:17:14] Typhon вышел(а) из комнаты
[04:31:34] john вошёл(а) в комнату
[07:00:20] john вышел(а) из комнаты
[07:39:24] john вошёл(а) в комнату
[08:16:24] gds вышел(а) из комнаты
[08:58:59] gds вошёл(а) в комнату
[09:01:15] Vladimir Zapolskiy вышел(а) из комнаты
[09:03:23] Typhon вошёл(а) в комнату
[09:09:11] aloner2k вышел(а) из комнаты
[09:38:12] aloner2k вошёл(а) в комнату
[10:22:00] john вышел(а) из комнаты
[10:49:19] sceptic вошёл(а) в комнату
[10:49:50] Typhon вышел(а) из комнаты
[10:59:20] Typhon вошёл(а) в комнату
[11:07:25] animist вошёл(а) в комнату
[11:28:40] Typhon вышел(а) из комнаты
[12:01:16] Typhon вошёл(а) в комнату
[12:03:05] Typhon вышел(а) из комнаты
[12:07:34] Typhon вошёл(а) в комнату
[12:07:49] Typhon вышел(а) из комнаты
[12:13:37] aloner2k вышел(а) из комнаты
[12:19:49] Typhon вошёл(а) в комнату
[12:23:39] Typhon вышел(а) из комнаты
[12:40:42] <f[x]> nginx epoll использует. и просто close'ит сокеты (очевидно по timeout'у)
[12:41:21] Typhon вошёл(а) в комнату
[12:44:58] <animist> keepalive - это посылка probe tcp-пакета раз в 2 часа
[12:45:06] <gds> почитал -- везде советуют SO_KEEPALIVE ставить. Тут кривизна в том, что частный случай (localhost) позволяет по идее более умное определение того, умерло ли соединение, но не делает этого.
[12:46:00] Typhon вышел(а) из комнаты
[12:46:15] <f[x]> криво как-то. keepalive настройки то на весь хост влияют
[12:46:30] <animist> Если тебе не нужно достоверно знать в приложении, что пир отвалился из-за проблем с линком, то keepalive не нужен
[12:46:39] <f[x]> а мне тогда надо очень маленькими их ставить
[12:46:45] Typhon вошёл(а) в комнату
[12:46:55] <f[x]> animist: всё происходит на локалхосте
[12:47:15] <animist> f[x]: ну тогда проблем с линком не будет :)
[12:47:25] <f[x]> т.е. я рассчитываю узнавать об закрытом соединении без keepalive'а
[12:47:27] <f[x]> угу
[12:47:55] <gds> так не, можно в пределах сокета поставить -- setsockopt(SOL_SOCKET, SO_KEEPALIVE), как-то так.
[12:47:58] <animist> Соединение закрывается по FIN, keepalive тут перпендикулярен
[12:48:18] <animist> +1, это опиция сокета
[12:48:58] <f[x]> опция то сокета, но время keepalive - в /proc
[12:49:19] <animist> дефолтное время - если ты не указал сокету другое
[12:49:44] <f[x]> два часа слишком много
[12:49:57] <f[x]> и у меня всё это время весь сервер будет висеть
[12:50:11] <f[x]> вот такой вот tcpdump -- http://paste.defun.ru/m5b10b4bf
[12:53:26] <f[x]> а вот tcpdump для "нормального" соединения -- http://paste.defun.ru/m5a8fc7a0
[12:53:37] <f[x]> во втором случае есть RST и соединение закрылось
[12:53:44] Typhon вышел(а) из комнаты
[12:54:52] aloner2k вошёл(а) в комнату
[12:55:47] <f[x]> точнее там до rst видно что fcgi ack'нуло полученные данные и ack'нуло fin
[12:59:19] <f[x]> попробую то же на сишке повторить
[13:24:18] <f[x]> висит точно так же
[13:25:18] <gds> а вот теперь можно долбать сетевых знатоков.
[13:25:20] <ermine> так это bsd сокеты на обеих концах?
[13:25:57] <f[x]> угу
[13:26:44] <f[x]> знать бы где их найти..
[13:27:50] <gds> раньше в пидошке в ru.unix.prog можно было поспрашивать. аккуратно скрывая часть предмета вопроса, мне удавалось даже по виндовым сокетам узнавать полезные вещи.
[13:28:26] <gds> может жэжэшное ру_погромминг? если лень контачиться, оформляй вопрос, запощу.
[13:29:16] <ermine> знатоки болтаются где-то в irc
[13:29:56] <f[x]> gds: попробую сначала в irc/jabber пошариться
[13:30:04] <ermine> на irc.rinet.ru например, только не помню как канал называется, мобыть #unix
[13:52:28] <animist> f[x]: а что за вопрос?
[13:53:05] <f[x]> animist: изначально вот - http://sourceforge.net/mailarchive/forum.php?thread_name=20090915215355.b6e1227c.ygrek%40autistici.org&forum_name=ocamlnet-devel
[13:53:27] <f[x]> а вообще я уже пару дней тут всех достаю, но детали все по ссылке есть
[13:54:50] <ermine> да, вопрос интересный
[13:54:50] <animist> f[x]: По идиотским причинам моего работодателя, у меня нет инета сейчас... А так по TCP в целом могу поотвечать
[13:55:26] <animist> Можешь сюда запостить?
[13:55:31] <f[x]> в приват сейчас
[13:55:36] <animist> ок
[13:58:07] <ermine> f[x]: подумалось, что это и телнетом можно воспроизвести, на любую слушающую программу на локалхосте, если та по таймауту закрывает
[13:59:00] <f[x]> тут важно чтобы сервер что-то долго делал в это время - я эмулирую sleep'ом
[13:59:00] <ermine> f[x]: например телнетом пойти на локальный веб
[13:59:20] <ermine> f[x]: с другой стороны нгинкса
[14:00:20] <f[x]> а, может
[14:00:29] <ermine> попробуй
[14:00:44] <ermine> телнет должен по идее корректно схлопнуться
[14:01:02] <f[x]> т.е. телнетом http запрос делать?
[14:01:12] <ermine> ага
[14:01:13] <f[x]> мне надо их несколько чтобы backlog забить (предположительно)
[14:01:50] <ermine> есть утилитка nc, но хз как там уследить за закрытием
[14:03:08] <f[x]> по-моему это не важно т.к. проблема между fcgi-сервер а не клиент-сервер
[14:03:59] <ermine> а ты проверь
[14:04:05] <ermine> чтобы отсеять лишнее
[14:06:00] <f[x]> ок
[14:06:45] <ermine> если твоя догадка верна, то это бага nginx - не закрывает сокет корректно :)
[14:06:57] <f[x]> nginx закрывает close'ом
[14:07:10] <gds> nginx может хитро закрывать соединение -- не уверен, что получится повторить это telnet/nc.
[14:07:50] <ermine> всё может быть
[14:08:02] <ermine> я просто предлагаю проверить это с другой стороны nginx'a
[14:08:03] <f[x]> и потом в любом случае моя прога не должна виснуть из-за nginx'а
[14:08:27] <ermine> там и там у nginx листенер порта
[14:09:47] <ermine> потом, можно написать на камле несложный код с bind/accept/establish_server и повротить игру
[14:10:47] <ermine> чтобы проверить, дело ли только в nginx и на классическом коде не воспроизводится
[14:11:22] <f[x]> ermine: можешь на bsd попробовать?
[14:11:22] <ermine> чож вы тут делаи пару недель? :)
[14:11:32] <f[x]> отложил, времени не было
[14:11:52] <ermine> f[x]: у меня как-то давно fcgi работал под апачем, такого никогда не наблюдала
[14:12:41] <ermine> вон в сульци старом была какая-то хреновина с fcgi
[14:15:23] <f[x]> > <animist> По-хорошему нормальный TCP стек должен был бы заретрансмитить FIN, но он этого не сделал - считаю, что проблема, скорее всего, в стеке
[14:15:30] <f[x]> +1
[14:16:23] Typhon вошёл(а) в комнату
[14:26:39] <ermine> в линуксной имплементации стэка :)
[14:26:52] ermine прячется
[14:27:07] <animist> В линуксной имплементации стэка на lo интерфейсе, это важно
[14:28:01] <animist> Она для TCP немного отличается ради повышения производительности
[14:29:18] <ermine> ну поэтому я предлагала проверить телнетом
[14:30:22] <ermine> вчера сработала моя идея поставить кипалив маленький
[14:30:31] <ermine> мож сегодня еще чонить сработает
[15:28:24] <animist> f[x]: посмотрел на http://paste.org.ru/?bq8mnl ещё раз более внимательно, ты с фаерволлом не баловался?
SYN-пакеты под линиями 4, 11, 14, 17, 21 и 24 - они все относятся к соединению, инициированному с 50541 порта, и эти пакеты, исходя из seq/ack_seq, суть ретрансмиты. Итого, все ACK из 5, 12, 15 и т.д. не добрались до порта 10000, FIN из 20 не добрался, но всё же первый SYN из строки 3 дошёл.
Как результат, 50541 сидит уже в ESTABLISHED, а 10000 лишь в SYN_RECV и ретрансмитит свой SYN/ACK безнадёжно.
[15:40:46] <f[x]> фаерволла нету вообще
[15:42:20] <ermine> f[x]: у тебя на машине чонить тяжелое работает, юзающее локалхост?
[15:43:24] <animist> Как бы то ни было, ТСР пакеты 50541 -> 10000 (кроме пакетов с SYN флагом) не ходят. А в обратную сторону ходят все пакеты хорошо.
[15:44:12] <animist> Такова разгадка дампа :)
[15:44:36] <ermine> фиговая разгадка
[15:44:53] <ermine> это лишь расшифровка
[15:45:21] <animist> это лишь вопрос терминологии :)
[15:45:23] <f[x]> ничего тяжелого
[15:45:29] <ermine> или не ходят, или теряются из-за перегрузки, или блокируются гденить
[15:45:53] <f[x]> может дрова madwifi..?
[15:45:54] <ermine> в syslog ничо интересного нет?
[15:45:57] <animist> sudo iptables-save покажи
[15:46:20] <f[x]> $ sudo iptables-save
iptables-save v1.4.2: Unable to open /proc/net/ip_tables_names: No such file or directory
[15:46:58] <animist> /proc примонтирован? А madwifi у тебя живёт на другом интерфейсе
[15:47:09] <f[x]> да, /proc есть
[15:47:10] <ermine> кроме ибтаблесов у них в линуксе существуют ранзые штучки
[15:47:38] <f[x]> угу, про madwifi это я на всяк случай, тем более на сервере его нет
[15:48:22] <animist> У нас тоже :) Но кроме outdated ipchains более ничего не вспоминается, что может так не пущать пакетики
[15:49:10] <ermine> ну следства натирования мимо иптаблесов есть?
[15:49:19] <ermine> я про NAT
[15:49:21] <f[x]> я и слов таких не знаю :)
[15:49:31] <animist> Нет, делается через iptables
[15:49:44] <ermine> да лениво переключаться на латинскую раскладку
[15:50:22] <ermine> f[x]: у тебя машина чем подключена к остальному миру - вайфаем или кабелем?
[15:50:49] <f[x]> вайфай, но повторялось ещё на трёх машинах
[15:50:57] <f[x]> у gds повторилось
[15:51:21] <ermine> везде было то же самое йадро?
[15:51:40] <f[x]> 2.6.26 и 28
[15:51:50] <f[x]> может попробовать другой tcp_congestrion algo?
[15:51:56] f[x] гуглит
[15:51:56] ermine помнит про глючное 2.6.8, но это ж было давно
[15:52:27] <f[x]> вот такое ещё находил http://kerneltrap.org/mailarchive/linux-netdev/2008/5/26/1942224 -- но вроде не в тему
[15:54:19] <ermine> остается одно - использовать fcgi по-человечески, то бишь запускать его один раз и навсегда
[15:54:42] <ermine> этим он отличается от обычного cgi
[15:55:18] <f[x]> а я как запускаю?
[15:55:45] <ermine> ну имелось в виду чтобы никто не закрывал соединение по неактивности
[15:57:16] <f[x]> э, ну это нао persistent connection к бэкенду - nginx не умеет
[15:57:28] <f[x]> а хорошо было бы
[15:59:14] <ermine> разве не умеет?
[15:59:39] <gds> сам по себе протокол fcgi вроде умеет сериализовывать запросы и ответы.
[16:00:08] <f[x]> http://wiki.nginx.org/NginxFeatureRequests
[16:00:48] <ermine> жуть
[16:04:20] animist вышел(а) из комнаты: Replaced by new connection
[16:04:24] animist вошёл(а) в комнату
[16:04:40] <ermine> f[x]: в ifconfig у тебя дофига записей?
[16:05:42] <f[x]> аж 3
[16:06:02] <f[x]> lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:224570 errors:0 dropped:0 overruns:0 frame:0
TX packets:224570 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:30791507 (29.3 MiB) TX bytes:30791507 (29.3 MiB)
[16:13:34] <f[x]> sudo sysctl -w net.ipv4.tcp_abort_on_overflow=1
tcp_abort_on_overflow (Boolean; default: disabled)
Enable resetting connections if the listening service is too slow and unable to keep up and accept them. It means that
if overflow occurred due to a burst, the connection will recover. Enable this option only if you are really sure that
the listening daemon cannot be tuned to accept connections faster. Enabling this option can harm the clients of your
server.
[16:14:33] <f[x]> вот это помогло, но опять таки костыль
[16:16:30] <gds> а как оно помогло -- fcgi просто не принимал соединения больше определённого количества?
[16:17:51] <f[x]> угу, видно что все кроме первых 5 (бэклог) сразу RST'ятся
[16:21:00] <gds> а nginx что выдаёт клиенту, не видно?
[16:21:18] <gds> 5XX какой-нибудь по идее?
[16:21:28] <f[x]> 502
[16:22:19] <gds> ну и нормально. поставить бэклог до нужного размера -- и круто.
[16:22:35] Mon вышел(а) из комнаты
[16:22:43] <f[x]> угу, наверное так
[16:22:47] Mon вошёл(а) в комнату
[16:23:31] <f[x]> я вообще думал что оно так по умолчанию делает - то есть на то бэклог и есть, а получается там ещё какая-то очередь кроме бэклога
[16:23:56] <animist> Попробуй sudo ip -6 link set down dev lo
[16:24:03] <gds> кстати да, тоже так думал раньше.
[16:24:09] <f[x]> ещё вариант на unix сокет перейти
[16:24:22] <f[x]> animist: это убивает ipv6 localhost?
[16:24:27] <animist> да
[16:24:50] <f[x]> localhost вообще пропал
[16:25:16] <animist> И IPv4?
[16:25:20] <animist> хммм
[16:25:54] <animist> ip link set up dev lo - обратно
[16:25:55] <f[x]> угу
[16:29:37] <f[x]> о, ещё на stackoverflow спрошу
[16:42:26] gds вышел(а) из комнаты: Replaced by new connection
[16:42:27] gds вошёл(а) в комнату
[17:00:06] <gds> f[x]: если не лень, попробуй данное решение на тесте с backlog = 1000 и на сильно большем времени работы siege. Интересно, что будет, когда 1000ый сокет, последний, добавленный в backlog, протухнет по причине таймаутов nginx'а или чего-либо такого.
[17:03:20] gds вышел(а) из комнаты: Replaced by new connection
[17:03:20] gds вошёл(а) в комнату
[17:13:10] Typhon вышел(а) из комнаты
[17:13:30] Typhon вошёл(а) в комнату
[17:20:16] gds вышел(а) из комнаты: Replaced by new connection
[17:20:17] gds вошёл(а) в комнату
[17:24:37] <f[x]> запустил для 100, уже все в CLOSE_WAIT т.е. всё ок
[17:32:11] gds вышел(а) из комнаты
[17:46:50] animist вышел(а) из комнаты: offline
[17:55:57] animist вошёл(а) в комнату
[18:08:18] gds вошёл(а) в комнату
[18:09:31] sceptic вышел(а) из комнаты
[19:03:28] f[x] вышел(а) из комнаты
[19:30:07] sceptic вошёл(а) в комнату
[20:58:13] Typhon вышел(а) из комнаты
[21:48:37] sceptic вышел(а) из комнаты
[21:57:35] gds вышел(а) из комнаты
[22:01:02] gds вошёл(а) в комнату
[22:14:44] Typhon вошёл(а) в комнату
[22:18:36] sceptic вошёл(а) в комнату
[22:32:28] Typhon вышел(а) из комнаты: Replaced by new connection
[22:32:32] Typhon вошёл(а) в комнату
[22:34:21] Typhon вышел(а) из комнаты: Replaced by new connection
[22:34:24] Typhon вошёл(а) в комнату
[23:42:38] sevenov вышел(а) из комнаты: Replaced by new connection
[23:42:39] sevenov вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!