为啥一个python系统用tornado跑100个进程比用gunicorn跑30个worker还要慢

发布于 2021-11-22 02:43:05 字数 161 浏览 795 评论 7

一个用flask框架做的系统,刚开用tornado跑40个进程,感觉很慢,后来换成100个,但不到100人同时访问就感觉慢了,后来试了试gunicorn,感觉跑30个worker就已经很快了

为啥呢?小白求指导

服务器是16核的,用nginx做静态文件服务器和代理

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

把回忆走一遍 2021-11-26 04:58:13

好文学习了

哑剧 2021-11-26 04:56:35


我们曾经犯过一个错误,在服务器上部署了两个node.js应用,然后每个应用都开了N-1个进程。 结果,它们互相之间抢夺CPU,导致系统的负荷急升。 虽然我们的服务器都是8核的机器,但仍然可以明显地感觉到由上下文切换引起的性能开销。
上下文切换是指CPU为了执行其它任务而挂起当前任务的现象。
在切换时,内核必须挂起当前进程的所有状态,然后装载和执行另一个进程。 为了解决这个问题,我们减少了每个应用开启的进程数,让它们公平地分享CPU,结果系统负荷就降了下来。

出处:
http://www.oschina.net/translate/optimising-nginx-node-js-and-networking-for-heavy-workloads

进程数不是越多越好的,过多的进程或者线程的上下文切换会耗近CPU,性能反而变差。

Tornado没用过,这里拿常见的Nginx来分析下,如果运行在一台4核服务器上,假设这台服务器专门用来做Web服务器,主要运行
Nginx
服务,这时建议
开3个Nginx worker进程,把这3个worker进程绑定到后面3个CPU核心(其他系统任务会优先使用第一个核心0001):

worker_processes 3;

worker_cpu_affinity 0010 0100 1000;

注:Nginx的worker进程是一个单线程的进程。Nginx除了worker进程,还有master进程和一些管理cache的进程(如果使用了nginx的cache功能)。

不再见 2021-11-25 17:03:12


我们曾经犯过一个错误,在服务器上部署了两个node.js应用,然后每个应用都开了N-1个进程。 结果,它们互相之间抢夺CPU,导致系统的负荷急升。 虽然我们的服务器都是8核的机器,但仍然可以明显地感觉到由上下文切换引起的性能开销。
上下文切换是指CPU为了执行其它任务而挂起当前任务的现象。
在切换时,内核必须挂起当前进程的所有状态,然后装载和执行另一个进程。 为了解决这个问题,我们减少了每个应用开启的进程数,让它们公平地分享CPU,结果系统负荷就降了下来。

出处:
http://www.oschina.net/translate/optimising-nginx-node-js-and-networking-for-heavy-workloads

进程数不是越多越好的,过多的进程或者线程的上下文切换会耗近CPU,性能反而变差。

Tornado没用过,这里拿常见的Nginx来分析下,如果运行在一台4核服务器上,假设这台服务器专门用来做Web服务器,主要运行
Nginx
服务,这时建议
开3个Nginx worker进程,把这3个worker进程绑定到后面3个CPU核心(其他系统任务会优先使用第一个核心0001):

worker_processes 3;

worker_cpu_affinity 0010 0100 1000;

注:Nginx的worker进程是一个单线程的进程。Nginx除了worker进程,还有master进程和一些管理cache的进程(如果使用了nginx的cache功能)。

少女净妖师 2021-11-25 14:16:01

进程开了不回收就越来越慢了,worker就是个进程池,相关概念google,搞清楚概念。

感觉没基础知识的人做开发就跟外行拿笔画画一样,乱画一气。

緦唸λ蓇 2021-11-24 16:33:48

慢是多少,快是多少? 自己好好测试一下把,感觉不靠谱。

孤独患者 2021-11-24 01:39:56

进程开了不回收就越来越慢了,worker就是个进程池,相关概念google,搞清楚概念。

感觉没基础知识的人做开发就跟外行拿笔画画一样,乱画一气。

月亮是我掰弯的 2021-11-22 14:01:08


我们曾经犯过一个错误,在服务器上部署了两个node.js应用,然后每个应用都开了N-1个进程。 结果,它们互相之间抢夺CPU,导致系统的负荷急升。 虽然我们的服务器都是8核的机器,但仍然可以明显地感觉到由上下文切换引起的性能开销。
上下文切换是指CPU为了执行其它任务而挂起当前任务的现象。
在切换时,内核必须挂起当前进程的所有状态,然后装载和执行另一个进程。 为了解决这个问题,我们减少了每个应用开启的进程数,让它们公平地分享CPU,结果系统负荷就降了下来。

出处:
http://www.oschina.net/translate/optimising-nginx-node-js-and-networking-for-heavy-workloads

进程数不是越多越好的,过多的进程或者线程的上下文切换会耗近CPU,性能反而变差。

Tornado没用过,这里拿常见的Nginx来分析下,如果运行在一台4核服务器上,假设这台服务器专门用来做Web服务器,主要运行
Nginx
服务,这时建议
开3个Nginx worker进程,把这3个worker进程绑定到后面3个CPU核心(其他系统任务会优先使用第一个核心0001):

worker_processes 3;

worker_cpu_affinity 0010 0100 1000;

注:Nginx的worker进程是一个单线程的进程。Nginx除了worker进程,还有master进程和一些管理cache的进程(如果使用了nginx的cache功能)。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文