对于受CPU限制的应用程序,增加了工作程序和/或内核。对于受I / O限制的应用程序,请使用“伪线程”。

Gunicorn是Python WSGI HTTP Server,通常驻留在反向代理(例如Nginx)或负载平衡器(例如AWS ELB)和Web应用程序(例如Django或Flask)之间。

1 第一种并发方式(工作者,又名UNIX进程)

每个工作程序都是一个加载Python应用程序的UNIX进程。工作人员之间没有共享内存。

建议的数量workers是(2*CPU)+1。

对于双核(2 CPU)计算机,建议workers值为5 。

gunicorn --workers = 5 main:app

2 第二种并发方式(线程)

Gunicorn还允许每个工人都有多个线程。在这种情况下,每个工作程序会加载一次Python应用程序,并且同一工作程序产生的每个线程都共享相同的内存空间。

要将线程用于Gunicorn,请使用threads设置。每次使用时threads,worker类都设置为gthread:

gunicorn --workers = 5 --threads = 2 main:app

workers * threads在我们的情况下,最大并发请求数为10。

使用辅助线程和线程时,建议的最大并发请求数仍为(2*CPU)+1。

因此,如果我们使用的是四核(4 CPU)计算机,并且要使用工作程序和线程的混合,则可以使用3个工作程序和3个线程,以获取9个最大并发请求。

gunicorn --workers = 3 --threads = 3 main:app

3 第三种并发方式(“伪线程”)

有一些Python库(例如gevent和Asyncio)通过使用由协程实现的“伪线程”在Python中启用并发。

Gunicorn通过设置它们的相应工作程序类,允许使用这些异步Python库。

这里的设置适用于我们要使用gevent以下命令运行的单核计算机:

gunicorn --worker-class = gevent --worker-connections = 1000 --workers = 3 main:app

worker-connections是gevent worker类的特定设置。

(2CPU)+1仍然建议使用,workers因为我们只有1个核心,我们将使用3个工作线程。

在这种情况下,最大并发请求数为3000(3个工作程序
每个工作程序1000个连接)

实际用例

通过调整Gunicorn设置,我们希望优化应用程序性能。

1 如果应用程序受I / O限制,则最佳性能通常来自使用“伪线程”(gevent或asyncio)。如我们所见,Gunicorn通过设置适当的worker类并调整workersto 的值来支持这种编程范例(2*CPU)+1。

2 如果应用程序受CPU限制,则应用程序处理多少个并发请求都无关紧要。唯一重要的是并行请求的数量。由于Python的GIL,线程和“伪线程”无法并行运行。实现并行性的唯一方法是增加到workers 建议的(2*CPU)+1,要理解的是,并行请求的最大数量是内核数。

3 如果有一个关于应用程序的关注内存占用,使用threads 和其对应的g线程工人阶级有利于workers产生更好的性能,因为应用程序加载每个工人和工人股运行一些内存每个线程一次,这涉及到一些费用额外的CPU消耗。

4 如果您不知道自己在做什么,请从最简单的配置开始,该配置仅设置workers为(2*CPU)+1,无需担心threads。从那时起,基准测试全都在反复试验。如果瓶颈是内存,请开始引入线程。如果瓶颈是I / O,请考虑使用其他python编程范例。如果瓶颈是CPU,请考虑使用更多的内核并调整其workers值。

建立系统

软件开发人员通常认为,可以通过优化应用程序代码来解决每个性能瓶颈,但并非总是如此。有时候,调整HTTP服务器的设置,使用更多资源或重新设计应用程序以使用不同的编程范例是我们提高整体应用程序性能所需的解决方案。在这种情况下,构建系统意味着了解我们可用于部署高性能应用程序的计算资源的类型(进程,线程和“伪线程”)。通过了解,设计和实施具有正确资源的正确技术解决方案,我们避免陷入尝试通过优化应用程序代码来提高性能的陷阱。

通过优化Gunicorn配置获得更好的性能的更多相关文章

  1. Mysql的硬件优化和配置优化

    mysql数据库的优化,算是一个老生常谈的问题了,网上也有很多关于各方面性能优化的例子,今天我们要谈的是MySQL硬件优化和系统参数的优化-即优化my.cnf文件 MySQL的优化我分为两个部分,一是 ...

  2. mysql系列十一、mysql优化笔记:表设计、sql优化、配置优化

    可以从这些方面进行优化: 数据库(表)设计合理 SQL语句优化 数据库配置优化 系统层.硬件层优化 数据库设计 关系数据库三范式 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非 ...

  3. Nginx总结(九)Nginx服务器高性能优化的配置--轻松实现10万并发访问量

    前面讲了如何配置Nginx虚拟主机,如何配置服务日志等很多基础的内容,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category ...

  4. CentOS6.5 Nginx优化编译配置[续]

    继续上文CentOS6.5 Nginx优化编译配置本文记录有关Nginx系统环境的一些细节设置,有关Nginx性能调整除了配置文件吻合服务器硬件之前就是关闭不必要的服务.磁盘操作.文件描述符.内核调整 ...

  5. JDBC程序优化--提取配置信息放到属性文件中

    JDBC程序优化--提取配置信息放到属性文件中 此处仅仅优化JDBC连接部分,代码如下: public class ConnectionFactory { private static String ...

  6. Gunicorn配置部分的翻译

    写在前面,虽然翻译得很烂,但也是我的劳动成果,转载请注明出处,谢谢. Gunicorn版本号19.7.1 Gunicorn配置 概述 三种配置方式 优先级如下,越后的优先级越大 1.框架的设置(现在只 ...

  7. Tomcat 5常用优化和配置

    Tomcat 5常用优化和配置 1.JDK内存优化:Tomcat默认可以使用的内存为128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件 ...

  8. tomcat常用的优化和配置

    Tomcat 5常用优化和配置 1.JDK内存优化: Tomcat默认可以使用的内存为128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文 ...

  9. 20190726_安装CentOS7minimal版本后需要做的优化和配置

    20190726_安装CentOS7minimal版本后需要做的优化和配置 CentOS系统镜像下载地址:https://www.centos.org/ CentOS的Minimal(最小化安装版本) ...

随机推荐

  1. 5G浪潮来袭,程序员在风口中有何机遇

    导读:本文共2894字,预计阅读时间为9分钟.通过阅读本文,你将了解到5G的优势.即将燃爆的领域以及程序员在快速发展的5G产业中所需关注的技术. 5G时代已经来临 随着中美5G主导权之战的持续发酵,5 ...

  2. IAR运行程序警告:undefined behavior: the order of volatile accesses is undefined in this statement

    运算符两边都是volatile变量的警告,将IAR设置如下即可:

  3. 【转】Redis常见面试题

    介绍:Redis 是一个开源的使用 ANSI C 语言编写.遵守 BSD 协议.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的 API的非关系型数据库. 传统数据 ...

  4. 鲜贝7.3--python安装

    方法一:google 搜索 anaconda 进入官网下载64位最新版本 勾选加入环境变量 +默认3.7 打开cmd pip 发现已经完成安装 右键此电脑 属性 高级属性 环境变量 ’ 已经被加入 方 ...

  5. cicros安装

    1.下载与安装依赖包 wget https://github.com/libgd/libgd/releases/download/gd-2.2.5/libgd-2.2.5.tar.gz tar zxv ...

  6. nowcoder941B 弹钢琴

    题目链接 思路 首先按照音色排个序,顺便离散化一下音高. 用\(h[i]\)表示第\(i\)个键的音高,用\(w[i]\)表示第\(i\)个键的春希度. 朴素\(dp\) \(f[i][j]\)表示前 ...

  7. C++ 回调函数的多种用法

    什么是回调函数, 就是以函数指针做参数传递给另一个函数称之为回调函数, 字面意思很简单, 但就这几个字想理解回调函数, 那又很难.因此别就这这字面意思, 只要知道怎么用, 在什么情况下用就行了 什么场 ...

  8. Qt 编译配置相关总结

    MinGW 与 MSVC 编译的区别 我们可以从 Qt 下载页面看到两种版本编译器,如下图: 我们来对比一下这两个编译器的区别: MSVC 是指微软的 VC 编译器. MinGW 是 Minimali ...

  9. Spring的工具类StringUtils使用

    我们经常会对字符串进行操作,spring已经实现了常用的处理功能.我们可以使用org.springframework.util.StringUtils 工具类帮我们处理字符串. 工具类整理如下:   ...

  10. 扩展centos7.4虚拟机磁盘大小

    虚拟机分配磁盘40GB,实际系统分区只用了20GB,需要手工扩展到40GB,操作方法如下: 查看磁盘信息(确认主分区只有17GB):[root@test-web1 ~]# df -hFilesyste ...