我有一个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本身?我的硬件?你知道吗
除了您提到的内容之外,请考虑自动python garbage collector。你知道吗
如果每秒需要500 X 10个请求,那么CherryPy/Cheroot线程池(默认情况下为10个线程)将很难运行,除非增加线程池大小,或者添加更多cpu来运行更多CherryPy守护进程。你知道吗
如果您有4个守护进程和默认线程池,那么实际上CherryPy有4 X 10=40个线程可以同时工作(忽略OS调度器和GIL)。你知道吗
对于您描述的那种负载,基于异步/事件的服务器似乎更合适。或者,您必须在nginx代理中更加智能,尝试直接从nginx提供任何静态服务,并且只提供一些到达CherryPy的请求。你知道吗
相关问题 更多 >
编程相关推荐