Высокая задержка после передачи кодовой базы Lua с пользовательского HTTP-сервера в Nginx

В течение последних нескольких лет мы работали с собственным предварительно разветвленным HTTP-сервером, написанным на C ++, libevent и встроенным Lua (LuaJit использует ту же общую библиотеку LuaJit, которую использует openresty, пакет Nginx). У него почти та же архитектура, что и у Nginx по стечению обстоятельств.

Большая часть бизнес-функций этого сервера находится в «обработчиках» сценариев Lua, и когда мы увидели, что Nginx поддерживает Lua, мы подумали, что переместим нашу кодовую базу на Nginx и воспользуемся всей поддержкой сообщества, которую имеет Nginx. Мы переместили весь код, и наше тестирование показывает, что все работает, насколько функциональность сохраняется, однако …

Мы столкнулись с проблемой. Задержка для HTTP-запроса на старом обычном сервере C ++ обычно составляла 2 мс. Новый сервер на базе Nginx работает около 60 мс. Странно то, что наши внутренние измерения фактического выполнения кода Lua (с использованием Lua os.clock () для областей временного кода) показывают, что две версии сервера практически идентичны скорости выполнения Lua.

Использование различных профилировщиков не показывает чрезвычайно большой области медлительности в коде Nginx. pcre является самым высоким с примерно 6% проведенного времени.

Еще кое-что. В нашей конфигурации есть прокси-сервер Nginx, взаимодействующий с нашим Nginx Lua Server, оба на одной машине, взаимодействующие через 127.0.0.1, так что это LAN => Nginx Proxy => Nginx Lua Server.

ldd nginx
linux-vdso.so.1 =>  (0x00007ffc02ff3000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f88d0b46000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f88d090f000)
libluajit-5.1.so.2 => /d1/apps/mt3/openresty/luajit/lib/libluajit-5.1.so.2 (0x00007f88d069a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f88d0418000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f88d01db000)
libssl.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f88cff79000)
libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f88cfb81000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f88cf97d000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f88cf765000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f88cf3da000)
/lib64/ld-linux-x86-64.so.2 (0x00007f88d0d72000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f88cf1c4000)

У кого-нибудь есть идеи?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]