Hello! 2013/12/2 Jian Wu: > nginx的默认性能应该是多少呢?我安装了nginx后,按默认的nginx.conf用ab进行性能测试,发现RPS根本到不了10K,也就5k左右的样子。问题出在哪儿呢?我使用的是localhost访问的,没有其他逻辑,才到的这个RPS,如果采用lua模块添加了一些逻辑之后,RPS更低了,只有2K。 很奇怪你在提供测试结果的同时并没有提供更多的信息,比如 1. 你使用的系统本身的相关配置,比如 CPU 的型号以及是否使用了某种虚拟化技术。 2. 你实际使用的 ab 命令行。 3. 你在满载时,nginx 进程的 CPU 使用率。 关于 nginx 相关的性能测试有如下建议: 1. 使用 ab 或者 weighttp 工具的 -k 选项,即启用 HTTP keepalive 模式,以避免耗尽系统的可用端口,也避免测量系统的 TCP 连接建立和释放本身的开销。 2. 检查你的 nginx 错误日志文件里面是否有大量输出,刷错误日志是高代价操作。同时检查是否有错误消息。 3. 一般你系统中有 N 个可用的逻辑 CPU,就应当配置 N 个 nginx worker 进程。当然,如果 ab 这样的客户端压测工具运行在同一台机器上,你还需要给 ab 本身留些 CPU 资源,毕竟 ab 本身也是要耗费资源的。 4. 正确地配置 worker_cpu_affinity 可以避免多个 nginx worker 进程之间 CPU 争用的开销: http://nginx.org/en/docs/ngx_core_module.html#worker_cpu_affinity 5. 为了对你的性能测试结果作出合理的解释,应当在压测的时候使用 on-CPU 和 off-CPU 火焰图工具进行采样和分析,见 https://github.com/agentzh/nginx-systemtap-toolkit#sample-bt https://github.com/agentzh/nginx-systemtap-toolkit#sample-bt-off-cpu 毕竟性能测试是很容易弄错的,我们经常会犯低级错误。所以对压测过程本身进行分析并对测试结果本身作出正确的解释是非常必要的。 6. 你没有告知你测试的具体接口的细节,比如你所谓的测试 nginx 默认的配置是指压测其默认的 /index.html 文件吗?另外,你所说的“采用lua模块添加了一些逻辑”具体是指什么?由于你没有提供细节,所以别人无法在自己的环境中尝试重现你的结果。 7. 你应当总是提供你使用的相关软件(比如 nginx, ngx_lua 以及操作系统)的细节信息(比如种类和版本号)。 Regards, -agentzh
Hello! 2013/12/2 Jian Wu: > nginx的默认性能应该是多少呢?我安装了nginx后,按默认的nginx.conf用ab进行性能测试,发现RPS根本到不了10K,也就5k左右的样子。问题出在哪儿呢?我使用的是localhost访问的,没有其他逻辑,才到的这个RPS,如果采用lua模块添加了一些逻辑之后,RPS更低了,只有2K。 很奇怪你在提供测试结果的同时并没有提供更多的信息,比如 1. 你使用的系统本身的相关配置,比如 CPU 的型号以及是否使用了某种虚拟化技术。 2. 你实际使用的 ab 命令行。 3. 你在满载时,nginx 进程的 CPU 使用率。 关于 nginx 相关的性能测试有如下建议: 1. 使用 ab 或者 weighttp 工具的 -k 选项,即启用 HTTP keepalive 模式,以避免耗尽系统的可用端口,也避免测量系统的 TCP 连接建立和释放本身的开销。 2. 检查你的 nginx 错误日志文件里面是否有大量输出,刷错误日志是高代价操作。同时检查是否有错误消息。 3. 一般你系统中有 N 个可用的逻辑 CPU,就应当配置 N 个 nginx worker 进程。当然,如果 ab 这样的客户端压测工具运行在同一台机器上,你还需要给 ab 本身留些 CPU 资源,毕竟 ab 本身也是要耗费资源的。 4. 正确地配置 worker_cpu_affinity 可以避免多个 nginx worker 进程之间 CPU 争用的开销: http://nginx.org/en/docs/ngx_core_module.html#worker_cpu_affinity 5. 为了对你的性能测试结果作出合理的解释,应当在压测的时候使用 on-CPU 和 off-CPU 火焰图工具进行采样和分析,见 https://github.com/agentzh/nginx-systemtap-toolkit#sample-bt https://github.com/agentzh/nginx-systemtap-toolkit#sample-bt-off-cpu 毕竟性能测试是很容易弄错的,我们经常会犯低级错误。所以对压测过程本身进行分析并对测试结果本身作出正确的解释是非常必要的。 6. 你没有告知你测试的具体接口的细节,比如你所谓的测试 nginx 默认的配置是指压测其默认的 /index.html 文件吗?另外,你所说的“采用lua模块添加了一些逻辑”具体是指什么?由于你没有提供细节,所以别人无法在自己的环境中尝试重现你的结果。 7. 你应当总是提供你使用的相关软件(比如 nginx, ngx_lua 以及操作系统)的细节信息(比如种类和版本号)。 Regards, -agentzh --