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

GMT+4
[01:34:42] Typhon вышел(а) из комнаты
[07:02:47] john вошёл(а) в комнату
[08:00:12] gds вышел(а) из комнаты
[08:46:59] gds вошёл(а) в комнату
[10:07:56] Typhon вошёл(а) в комнату
[10:21:18] f[x] вошёл(а) в комнату
[10:38:41] <f[x]> gds: ага, с анализом согласен, но это не тот сокет..
[10:42:41] <f[x]> трабла в port 55424
[10:42:46] <f[x]> а у тебя повторялось поведение?
[10:44:33] <gds> пока хотел изучить по дампу, а как пойму, что ничего не понимаю, тогда буду запускать.
чуть попозже рассмотрю этот порт, интересно.
[10:44:54] <f[x]> ну там ничего нет по этому порту
[10:44:59] <f[x]> интресного
[10:47:18] <gds> знать бы, что в tcpdump означает "{0:1}" в конце строки.
[10:47:50] <gds> да, ничего интересного. но сейчас занят, позже буду запускать.
[11:25:07] <gds> а у меня следующий цикл отладки подоспел.
ocamlbuild, sys_command:
"ocamlfind ocamldep -pp \"camlp4r -I d:/gds/dev/overbld/b20090914/lib/deriving/syntax utils.cmo type.cmo base.cmo id.cmo extend.cmo show_class.cmo\" -modules test_uhack.ml > test_uhack.ml.depends"
->
"bash -c \"ocamlfind ocamldep -pp \\\"camlp4r -I d:/gds/dev/overbld/b20090914/lib/deriving/syntax utils.cmo type.cmo base.cmo id.cmo extend.cmo show_class.cmo\\\" -modules test_uhack.ml > test_uhack.ml.depends\""
а от баша вполне можно ожидать преобразование "d:/path" в "d;c:\msys\path". Видимо так и получается, так как ocamlfind в аргументах получает уже лажу.
[11:30:18] <f[x]> вот за что я не люблю всякие подобные надстройки..
[11:30:39] <gds> зато почти юникс.
[11:30:40] <f[x]> cygwin bash или отдельный за подобным замечены не были
[11:31:50] <gds> так это вроде и есть отдельный. видимо их много разных, этих отдельных.
[11:32:45] <f[x]> не, это msys'овский, иначе с какой бы радости он C:/msys писал?
[11:43:57] <gds> # Sys.command "bash -c \"./test_args.exe -pp \\\"d:/gds/dev\\\"\"";;
-pp = "d:/gds/dev"
- : int = 0
# Sys.command "bash -c \"./test_args.exe -pp \\\"a d:/gds/dev\\\"\"";;
-pp = "a d;c:\\msys\\gds\\dev"
- : int = 0
кого бы убить?..
[11:45:27] <f[x]> а без bash -c всё ок?
[11:45:52] <f[x]> а..
[11:45:54] <f[x]> гг
[11:48:30] <gds> вроде в рассылке предложили универсальное решение квотинга: создавать временный файл, который скармливать башу через bash -c /tmp/filename.sh, а квотинг в баше предсказуемый, в отличие от cmd.
[11:51:18] <gds> кстати, а вопрос ведь правильный.
# Sys.command ".\\test_args.exe -pp \"a d:/gds/dev\"";;
-pp = "a d:/gds/dev"
- : int = 0
без баша -- ок.
но нельзя таким образом пропатчить ocamlbuild.
[11:55:05] <f[x]> а если взять 'd:/gds/dev' в кавычки?
[11:55:25] <f[x]> очевидно это кривость msys-bash'а потому что он пытаетс одновременно поддерживать два типа путей
[11:55:42] <gds> знать бы, где у него это откручивается.
[11:56:17] <f[x]> думаю без пересборки нигде, это ведь его mission goal
[11:57:09] <gds> в PATH -- да. в аргументах -- явно самодеятельность, за которую надо по попке.
[11:59:19] <f[x]> вполне возможно что так и задумано
[12:01:04] <gds> $ echo './test_args.exe -pp "a c:/msys"' > /tmp/kva1
$ bash -c /tmp/kva1
-pp = "a c;c:\\msys\\msys"
[12:02:04] <f[x]> пщщщщ :)
[12:02:27] <gds> имел ввиду "пццццц"?
[12:03:05] <f[x]> неважно, баш кривой, выкинь его
[12:07:36] Typhon вышел(а) из комнаты
[12:07:49] Typhon вошёл(а) в комнату
[12:14:11] sevenov вошёл(а) в комнату
[12:17:42] <gds> а какой баш брать? посмотрел, чото на msys-сайте не густо с башами.
[12:19:07] <f[x]> а я очень не уверен что какой-нибудь другой будет корректно работать в связке msys+mingw
[12:20:39] <gds> проверить не сложно.
[12:21:53] <gds> тут -- http://gnuwin32.sourceforge.net/packages.html -- баша не дают.
[12:22:52] john вышел(а) из комнаты
[12:23:34] <gds> цыгвыновский -- фу, http://sourceforge.net/apps/mediawiki/win-bash/index.php?title=FAQ -- тоже (судя по первой же секции faq'а).
[12:24:05] <f[x]> я вот этот win-bash юзал
[12:24:12] <f[x]> и cygwin'овский
[12:24:51] <gds> этот не нравится тем, что в общем-то у меня всё может быть раскидано по разным дискам, ну и версия старая, мне нужен bash 3 хотя бы.
[12:25:20] <f[x]> ещё есть http://www.steve.org.uk/Software/bash/
[12:25:25] <f[x]> версия 2
[12:25:48] <f[x]> тогда ситуация патовая
[12:25:51] <f[x]> хоть сам собирай
[12:28:36] <gds> ага, версия 2. как-то ковырял баш и читал, что в 3 они много пофиксили, деталей уже не помню, поэтому 2 -- ссыкотно.
может хаком обойтись? вычислять места, где оно может разбивать пути по двоеточию и заменить там слеши на обратные или на нотацию "/d/some/path"?..
[12:29:30] <f[x]> может просто кавычек хватит - пробовал?
[12:29:54] <f[x]> пожалуйся в msys
[12:34:05] <gds> ./test_args.exe -pp "a 'c:/msys'" -- та же лажа
./test_args.exe -pp '"a c:/msys"' -- передаёт аргумент, содержащий двойные кавычки слева-справа
./test_args.exe -pp 'a c:/msys' -- та же лажа
./test_args.exe -pp "'a c:/msys'" -- передаёт аргумент, содержащий одинарные кавычки слева-справа
ещё варианты есть? попробовать не влом.
[12:35:21] <f[x]> ./test_args.exe -pp "a 'c:/msys'"
[12:35:39] <f[x]> не заметил
[12:35:40] <f[x]> хм
[12:35:50] <gds> угу, попробовал в первую очередь.
[12:36:03] <f[x]> заэкранировать : ?
[12:37:31] <gds> -pp "a c\:/msys" -> "a c\\;c:\\msys\\msys" :)
[12:39:03] <f[x]> ыы
[12:40:19] <gds> даже ./test_args.exe -pp "a c"$'\x3A'"/msys" то же даёт, падлюка.
оторвать бы кому-нибудь этот патч.
[12:43:50] <f[x]> $'..' это башевский Char.chr?
[12:44:16] <gds> типа да. $'\n' например. unescape.
[12:44:42] <f[x]> ясно, где-то глубоко "пофиксили" :)
[12:45:14] <gds> именно что глубоко:
export A="a c"
export B=":"
export C="/msys"
./test_args.exe -pp "$A$B$C"
та же фигня.
[12:48:09] <gds> может пробовать смотреть на строку аргументов (примерно так, как баш), и в ocamlbuild (там, где оно bash -c подставляет) заменять "d:/dir" на "d:\dir"? когда указываю -pp "camlp4r -I d:\dir", всё работает.
[12:48:40] <f[x]> хак хака
[12:48:44] <f[x]> вполне в духе
[12:48:51] <gds> это винда, ё.
[12:51:59] sceptic вышел(а) из комнаты
[12:55:37] sceptic вошёл(а) в комнату
[12:58:21] Typhon вышел(а) из комнаты
[12:59:56] Typhon вошёл(а) в комнату
[14:08:42] sevenov вышел(а) из комнаты
[14:28:17] Typhon вышел(а) из комнаты
[14:31:14] sevenov вошёл(а) в комнату
[15:07:49] <gds> unhack, блин.
- in : "ocamlfind ocamldep -pp \"camlp4r -I d:/gds/dev/overbld/b20090914/lib/deriving/syntax utils.cmo type.cmo base.cmo id.cmo extend.cmo show_class.cmo\" -modules test_uhack.ml > test_uhack.ml.depends"
- unh: "ocamlfind ocamldep -pp \"camlp4r -I d:\\gds/dev/overbld/b20090914/lib/deriving/syntax utils.cmo type.cmo base.cmo id.cmo extend.cmo show_class.cmo\" -modules test_uhack.ml > test_uhack.ml.depends"
- out: "bash -c \"ocamlfind ocamldep -pp \\\"camlp4r -I d:\\gds/dev/overbld/b20090914/lib/deriving/syntax utils.cmo type.cmo base.cmo id.cmo extend.cmo show_class.cmo\\\" -modules test_uhack.ml > test_uhack.ml.depends\""
и работает. (по крайней мере компиляция ml -> cmo)
но не присунешь же такой кривой патч в апстрим.
надо долбать msys-ребятушек, в целом.
[16:24:37] Mon вышел(а) из комнаты
[16:29:26] Mon вошёл(а) в комнату
[17:32:48] gds вышел(а) из комнаты
[18:25:32] sevenov вышел(а) из комнаты
[18:59:42] Typhon вошёл(а) в комнату
[19:01:23] gds вошёл(а) в комнату
[19:03:16] gds вышел(а) из комнаты: Replaced by new connection
[19:03:17] gds вошёл(а) в комнату
[19:09:14] f[x] вышел(а) из комнаты
[19:16:04] animist вошёл(а) в комнату
[19:17:35] <animist> Привет всем, нашёл ссылку на рум в caml-list, поучаствую по мере возможности :)
[19:18:12] <gds> неплохая идея.
[20:22:49] 604 вошёл(а) в комнату
[21:12:19] sevenov вошёл(а) в комнату
[21:30:18] ygrek вошёл(а) в комнату
[21:44:01] <gds> ygrek: потестил fcgi по твоему методу. все соединения через разные стадии массово перешли в TIME_WAIT, затем все прикрылись -- по netstat -an | grep 10000 у меня только одна запись, LISTEN.
[21:44:27] <ygrek> тааак..
[21:44:32] <ygrek> мило
[21:44:38] <ygrek> таймауты не трогал?
[21:45:12] <gds> взял код с пастилки,
$ ocamlfind ocamlopt -thread -linkpkg -package threads,netcgi2 tst.ml -o tst
$ ./tst
[21:45:24] <gds> т.е. не трогал вообще ничего.
[21:45:47] <gds> $ uname -a
Linux oldub 2.6.28-15-generic #49-Ubuntu SMP Tue Aug 18 18:40:08 UTC 2009 i686 GNU/Linux
[21:46:30] <ygrek> а в качестве фронтеда - nginx?
[21:46:52] <ygrek> у меня TIME_WAIT вообще не было кстати..
[21:46:53] <gds> во я тормоз.
[21:46:59] <gds> отбой.
[21:47:13] <gds> заодно покажи, что в конфиг nginx'у надо вписать.
[21:47:35] <ygrek> сейчас под рукой нет, но по памяти ничего необычного не писал
[21:53:59] <ygrek> server {
listen 8001;
server_name localhost;
access_log /var/log/nginx/test.access.log;
location / {
fastcgi_pass 127.0.0.1:10000;
include fastcgi_params;
}
}
[21:59:10] <ygrek> siege -b -c 20 -t30s localhost:8001
[22:00:37] inky-kinky вошёл(а) в комнату
[22:00:46] <ygrek> $ sudo netstat -tpn | grep 10000
tcp 0 0 127.0.0.1:10000 127.0.0.1:56169 SYN_RECV -
tcp 0 0 127.0.0.1:10000 127.0.0.1:56171 SYN_RECV -
tcp 0 0 127.0.0.1:10000 127.0.0.1:56161 SYN_RECV -
tcp 0 0 127.0.0.1:10000 127.0.0.1:56173 SYN_RECV -
tcp 0 0 127.0.0.1:10000 127.0.0.1:56155 CLOSE_WAIT 2024/fcgi
tcp 529 0 127.0.0.1:10000 127.0.0.1:56165 CLOSE_WAIT -
tcp 0 0 127.0.0.1:10000 127.0.0.1:56163 ESTABLISHED -
tcp 529 0 127.0.0.1:10000 127.0.0.1:56157 CLOSE_WAIT -
tcp 529 0 127.0.0.1:10000 127.0.0.1:56167 CLOSE_WAIT -
tcp 529 0 127.0.0.1:10000 127.0.0.1:56159 CLOSE_WAIT -
[22:00:53] ygrek спамер
[22:01:08] <ygrek> вот этот вот ESTABLISHED - и будет траблой
[22:02:34] <gds> nginx настроил по примеру из конфига, получилось.
siege сделал так, как ты писал на днях.
да, ESTABLISHED есть, ровно один.
а я было обрадовался.
[22:02:57] <gds> жопка, конечно..
[22:06:00] <ygrek> напишу наверное в ocamlnet-devel, может кто разбирается в теме
[22:16:27] <gds> будет очень интересно узнать причину.
а когда-нибудь пробовал дождаться, пока соединение не убьётся?
[22:19:26] <ygrek> 10 минут ждал
[22:20:15] <ygrek> для чистоты эксперимента можно ещё на сях fcgi написать
[22:23:59] 604 вышел(а) из комнаты
[22:27:30] <gds> ещё показательно, что остаётся ровно одно соединение. имхо бага в ocamlnet.
[22:28:06] <gds> (т.е. считаю, что это -- причинно-следственная связь от 1 к 2).
[22:28:07] <ygrek> по strace совершенно непонятно при чём тут ocamlnet
[22:28:30] <ygrek> соединение становится ESTABLISHED _до_ того как его fcgi получит по accept'у
[22:28:53] <gds> но может быть EST.. и _после_ того.
[22:29:50] <ygrek> т.е.?
[22:33:00] <gds> сценарий: nginx получил соединение, убедился в живости fcgi-сервера посредством connect, сделал accept() (и избежал bad gateway), отослал ему fastcgi-запрос, а дальше ocamlnet тупит, делая read().
[22:33:47] inky-kinky вышел(а) из комнаты
[22:34:10] <ygrek> э, ну не совсем так
[22:34:20] <ygrek> nginx сначала делает accept
[22:34:26] <ygrek> потом коннектит fcgi
[22:34:41] <gds> конечно, accept сначала.
[22:34:46] <ygrek> если коннект или read таймаутится - пробует другой upstream если есть - иначе 502
[22:34:48] <ygrek> всё
[22:35:09] <ygrek> у нас из-за таймаута в fcgi nginx получает таймаут и уже в процессе не учавствует
[22:35:43] <ygrek> но каким-то образом оставляет нам соедниение не в CLOSE_WAIT, а ESTABLISHED
[22:48:10] <gds> как я понял, nginx обламывает fcgi, а тот продолжает держать соединение. не из-за того ли, что fcgi что-то проигнорировал? например, какую-нибудь ошибку по select(), если он им пользуется (забыв запихать в список сокетов, ошибки по которым интересно), или исключение какое-нибудь проигнорировал.
сравнил tcpdump по висяку и по нескольким другим сокетам -- картина похожая.
[22:50:18] sevenov вышел(а) из комнаты
[22:51:11] <ygrek> может..
[22:51:29] <ygrek> но read-то хоть должен был вернуть ошибку?
[22:52:18] sevenov вошёл(а) в комнату
[22:52:36] <ygrek> накатал телегу в ocamlnet-devel - посмотрим
[23:13:35] Русский вошёл(а) в комнату
[23:15:41] <gds> мда, ребе гугельман по "nginx fastcgi "ESTABLISHED" netstat" не даёт ничего интересного.
[23:18:47] <ygrek> да, я тоже не нашёл ничего похожего по описанию, только один тред про java с похожим выводом netstat'а и без ответов
[23:20:07] Русский вышел(а) из комнаты: QIP Infium: Спокойное общение
[23:22:10] ermine вышел(а) из комнаты
[23:30:56] DimitryKakadu вошёл(а) в комнату
[23:32:08] <DimitryKakadu> Привет всем.
[23:32:25] <DimitryKakadu> я пытаюсь заставить ocamldep знать про camlp4o
[23:32:43] <DimitryKakadu> нашел рекомендацию писать
ocamlfind ocamldep -syntax camlp4o -package pa_someext *.ml
[23:33:11] <DimitryKakadu> вот только я не понимаю в каком смысле здесь package указан
[23:34:13] <DimitryKakadu> OOOO
[23:34:17] <gds> если это дословно процитировано, то его быть не должно. видимо, это какой-то мой абстрактный пример.
[23:34:32] <DimitryKakadu> получилось
[23:34:45] <DimitryKakadu> надо писать -package camlp4
[23:34:49] <DimitryKakadu> так работает
[23:40:17] sevenov вышел(а) из комнаты
[23:42:25] sevenov вошёл(а) в комнату
[23:47:02] <ygrek> питон до добра не доведёт, пруфлинк --> http://zabivator.livejournal.com/352879.html
[23:49:56] DimitryKakadu вышел(а) из комнаты
[23:50:43] <gds> размеры нехилые. конечно, в экстремальных случаях будет фигня.
[23:52:21] <gds> думал попробовать захостить там оверблд (однако надо tos почитать тщательно). могу заодно проверить.
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!