Hello! 2013/11/6 Napoléon: > 目前项目使用apachebench来进行性能测试,发送10000个请求,并发2000,结果是每秒能处理3000个请求左右,项目要求达到5000。 如果你使用 -k 选项,可以得到怎样的结果? 另外,如果你使用 -c20 又可以得到怎样的结果? > 测试时发现redis进程的cpu占用率一直在60%以上。 > 请问,使用这个库的时候有什么可以用的优化选项? > 有如下建议: 1. 可以使用 LuaJIT v2.1 分支,具体做法是: git clone http://luajit.org/git/luajit-2.0.git cd luajit-2.0 git checkout v2.1 make CC=gcc CCDEBUG=-g \ XCFLAGS='-DLUAJIT_NUMMODE=2' -j8 sudo make install PREFIX=/opt/luajit21 然后在构造 ngx_lua 时指定 LUAJIT_LIB=/opt/luajit21/lib 和 LUAJIT_INC=/opt/luajit21/include/luajit-2.1 这两个环境变量。如果你使用的是 ngx_openresty 的话,可以使用 ./configure --with-luajit=/opt/luajit21 --with-luajit-xcflags='-DLUAJIT_NUMMODE=2' 构造。 2. 检查你的 nginx 错误日志中是否有大量输出。如果是调试日志,则禁用之。如果是 error 以上级别的错误,则解决之。 3. 确保你配置的 nginx worker 数量没有超过系统中可用的逻辑 CPU 的数目,并且恰当地配置了 worker_cpu_affinity 指令: http://nginx.org/en/docs/ngx_core_module.html#worker_cpu_affinity 4. 使用 on-CPU 火焰图工具和 off-CPU 火焰图工具对满载时的某一个 nginx worker 进程进行采样分析具体瓶颈的所在: https://github.com/agentzh/nginx-systemtap-toolkit#sample-bt https://github.com/agentzh/nginx-systemtap-toolkit#sample-bt-off-cpu > 说个简单的测试情况: > 当前项目在完全不调用resty-redis的情况下,发送10000个请求,并发2000,能达到每秒处理9000个请求。 建议在分享 benchmark 结果的时候能同时提供你使用的最小化的 benchmark 程序本身,包括较完整的 nginx 配置文件和所有 Lua 代码,以及你执行的具体步骤(包括原始的 ab 命令行)这样别人也可以在自己的环境中尝试复现你看到的结果。 另外,主动提供你使用的 nginx、ngx_lua 和 lua/luajit 的版本号和操作系统的相关细节信息也是很重要的 :) Best regards, -agentzh