将Lua代码基地从自定义HTTP服务器迁移到Nginx后,延迟变高

在过去的几年中,我们一直在运行一个自定义的、预分叉的、用C++、libevent和嵌入式Lua(使用与openresty(Nginx包)使用相同的LuaJit共享库的LuaJit)编写的HTTP服务器。仅仅凭巧合,它与Nginx具有几乎相同的架构。

该服务器的大部分业务功能都在Lua脚本的“处理程序”中,当我们看到Nginx支持Lua时,我们认为我们会将我们的代码库转移到Nginx,并利用Nginx拥有的所有社区支持。我们将所有代码移动过去,并经过测试,显示一切正常,就功能保持不变而言,然而.......

我们遇到了一个问题。旧的自定义C++服务器的HTTP请求延迟通常为2毫秒。基于Nginx的新服务器约为60毫秒。有一件奇怪的事情是,我们使用Lua os.clock()来计时代码区域的实际Lua代码执行的内部测量显示,两个服务器版本在Lua执行速度方面几乎是相同的。

使用各种分析器不显示Nginx代码中任何极大的缓慢区域。pcre是时间花费的最高点,约为6%。

还有一件事情。我们的设置有一个代理Nginx服务器,与我们的Nginx Lua服务器通话,在同一台机器上,通过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)

有没有什么想法?

点赞