python Web服务器基准测试低于预期

时间:2019-01-23 21:52:51

标签: python web nginx cherrypy

我有一台位于nginx(反向代理)后面的cherrrypy应用程序服务器。 Cherrypy作为每个内核(我的服务器为4个内核)的守护进程运行,nginx(也配置有4个工作线程)对传入的请求执行负载平衡。

我正在使用hey对GET获取Web应用程序的首页进行基准测试。对于200个并发请求和总共1万个请求的值,我达到了约400-500 rps。我需要至少能够处理10倍的数据。当我看直方图时:

 Response time histogram:
  0.014 [1] |
  0.721 [9193]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  1.429 [693]   |■■■
  2.137 [13]    |
  2.844 [0]     |
  3.552 [88]    |
  4.259 [0]     |
  4.967 [0]     |
  5.674 [0]     |
  6.382 [0]     |
  7.089 [12]    |

考虑到主页URL处理程序中没有任何IO操作,只是生成一个静态模板并发送过来,这很奇怪,有些请求要花这么长时间(1.5-7秒)来处理。

在经历过一些过早优化的兔子洞之前,我怎么能知道瓶颈是什么?是樱桃吗? python本身?我的硬件?

1 个答案:

答案 0 :(得分:0)

除了您提到的内容外,还考虑使用自动python garbage collector

如果您每秒需要500 X 10请求,那么除非您增加线程池大小并可能添加更多CPU来运行更多CherryPy守护程序,否则CherryPy / Cheroot线程池(默认为10个线程)将很难。 >

如果您有4个守护程序和默认线程池,那么CherryPy实际上有4个10 = 40个线程可以同时工作(忽略OS调度程序和GIL)。

对于您描述基于异步/事件的服务器的负载类型似乎更合适。否则,您必须在nginx代理中提高 smart 的价值,尝试直接从nginx提供静态服务,并且仅请求到达CherryPy的一些请求。