<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 9 Oct 2019, at 12:22, Илья Шипицин <<a href="mailto:chipitsine@gmail.com" class="">chipitsine@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">на 2018-м nginx.conf был доклад, как профилировать в районе Lua (и не только)</div><div class=""><br class=""></div><div class=""><a href="https://openresty.org/slides/nginx-conf-2018/" class="">https://openresty.org/slides/nginx-conf-2018/</a></div></div></div></blockquote><div><br class=""></div><div>+ видео:<div class=""><a href="https://www.youtube.com/watch?v=NR8U1qYHGqk" class="">https://www.youtube.com/watch?v=NR8U1qYHGqk</a></div><div class=""><br class=""></div></div><div><br class=""></div><blockquote type="cite" class=""><div class=""><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">ср, 9 окт. 2019 г. в 14:13, yanda.a <<a href="mailto:nginx-forum@forum.nginx.org" class="">nginx-forum@forum.nginx.org</a>>:<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Добрый день!<br class="">
Есть nginx с модулем lua. Мы используем content_by, в котором происходит<br class="">
подключение к tarantool и выполнение одной функции в нем. Библиотека для<br class="">
работы с tarantool умеет nginx cosockets, также используется keepalive<br class="">
(соединения попадают в пул). Все это работает достаточно быстро, но<br class="">
периодически бывают всплески по времени работы кода. Например, подключение к<br class="">
tarantool порой достигает 200мс, при том, что соединение находится в пуле.<br class="">
Для более точного измерения времени используем posix.clock_gettime() вместо<br class="">
ngx.now(), так как он более точный и не кеширует время. Да, есть<br class="">
дополнительные два системных вызова, но маловероятно, что они способны<br class="">
блокировать nginx на такое длительное время. Само время замеряем до и после<br class="">
tarantool:connect().<br class="">
<br class="">
Первым делом грешили на сам tarantool, но сняв дамп трафика с обоих стороны<br class="">
поняли, что по факту само соединение происходит быстро, попросту сам nginx<br class="">
пытается подключиться с "запозданием". Вероятно что-то блокирует его.<br class="">
<br class="">
Так как основной причиной блокировок может быть файловый I/O, решили<br class="">
воспользоваться bcc-tools для подтверждения этого. В частности,<br class="">
воспользовались funcslower. На данный момент пытаемся искать медленное<br class="">
выполнение следующих функций:<br class="">
/usr/sbin/nginx:ngx_write_file<br class="">
/usr/sbin/nginx:ngx_read_file<br class="">
/usr/sbin/nginx:ngx_copy_file<br class="">
c:open<br class="">
c:write<br class="">
c:read<br class="">
<br class="">
Но, к сожалению, в моменты всплеска времени подключения у нас нет медленной<br class="">
работы одной из этих функций.<br class="">
<br class="">
Подскажите, какие еще функции могут блокировать event loop? И каким образом<br class="">
можно диагностировать эту ситуацию?<br class=""></blockquote></div></div></blockquote><br class=""></div><br class=""></div></body></html>