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

2024-10-02 08:23:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个cherrrypy应用服务器,它位于nginx(反向代理)后面。Cherrypy作为每个核心的守护进程运行(我的服务器是4个核心),nginx(也配置了4个worker)对传入的请求执行负载平衡。你知道吗

我正在使用hey对我的webapp的首页进行基准测试。对于200个并发请求和总共10k个请求的值,我可以达到大约400-500rps。我至少要有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本身?我的硬件?你知道吗


Tags: 服务器代理核心time进程response基准nginx
1条回答
网友
1楼 · 发布于 2024-10-02 08:23:16

除了您提到的内容之外,请考虑自动python garbage collector。你知道吗

如果每秒需要500 X 10个请求,那么CherryPy/Cheroot线程池(默认情况下为10个线程)将很难运行,除非增加线程池大小,或者添加更多cpu来运行更多CherryPy守护进程。你知道吗

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

对于您描述的那种负载,基于异步/事件的服务器似乎更合适。或者,您必须在nginx代理中更加智能,尝试直接从nginx提供任何静态服务,并且只提供一些到达CherryPy的请求。你知道吗

相关问题 更多 >

    热门问题