博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx性能优化
阅读量:6454 次
发布时间:2019-06-23

本文共 2756 字,大约阅读时间需要 9 分钟。

hot3.png

设置worker_processes

一般来说,拥有几个逻辑CPU,就设置为几个worker_processes 为宜,但是worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了

查看逻辑CPU数量:cat /proc/cpuinfo | grep "processor" | wc -l

设置worker_cpu_affinity

Nginx默认没有开启利用多核cpu,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核cpu的性能。cpu是任务处理,计算最关键的资源,cpu核越多,性能就越好

示例:8核CPU,nginx配置信息:

worker_processes 8;worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
CPU工作状况:(输入 top 后,按1 查看)
top - 11:16:56 up 39 days,  1:16,  2 users,  load average: 0.09, 0.07, 0.10Tasks: 134 total,   1 running, 133 sleeping,   0 stopped,   0 zombieCpu0  :  0.0%us,  0.0%sy,  0.0%ni, 95.1%id,  0.0%wa,  0.0%hi,  0.0%si,  4.9%stCpu1  :  0.0%us,  0.0%sy,  0.0%ni, 98.8%id,  0.0%wa,  0.0%hi,  0.0%si,  1.2%stCpu2  :  2.3%us,  0.0%sy,  0.0%ni, 92.8%id,  0.0%wa,  0.0%hi,  0.0%si,  4.9%stCpu3  :  4.6%us,  9.2%sy,  0.0%ni, 81.2%id,  0.0%wa,  0.0%hi,  0.0%si,  5.0%stCpu4  :  1.9%us,  0.0%sy,  0.0%ni, 96.1%id,  0.0%wa,  0.0%hi,  0.0%si,  1.9%stCpu5  :  0.0%us,  0.0%sy,  0.0%ni, 98.1%id,  0.0%wa,  0.0%hi,  0.0%si,  1.9%stCpu6  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%stCpu7  :  0.0%us,  0.0%sy,  0.0%ni, 96.9%id,  0.0%wa,  0.0%hi,  0.0%si,  3.1%stMem:   1024884k total,   891244k used,   133640k free,   144852k buffersSwap:   262140k total,     4172k used,   257968k free,   434072k cached
上面的配置表示:8核CPU,开启8个进程。00000001表示开启第一个cpu内核,00000010表示开启第二个cpu内核,依次类推;有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭。

设置worker_rlimit_nofile

worker_rlimit_nofile 65535;

这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文
件数(ulimit -n)与 nginx 进程数相除,但是 nginx 分配请求并不是那么均匀,所以最好与 ulimit -n 的值保持一致。
现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。
这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。
查看linux系统文件描述符的方法:

[root@web001 ~]# sysctl -a | grep fs.filefs.file-max = 789972fs.file-nr = 510 0 789972

Events模块配置

events { 	worker_connections 65535; 	multi_accept on; 	use epoll; }
worker_connections 
每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections
。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高(一般和worker_rlimit_nofile一样就可以)。
记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。

multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接。

use 设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue。
(值得注意的是如果你不知道Nginx该使用哪种轮询方法的话,它会选择一个最适合你操作系统的)

补充说明

    与apache相类,nginx针对不同的操作系统,有不同的事件模型
    A)标准事件模型
        Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll
    B)高效事件模型
        Kqueue:使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X. 使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
        Epoll: 使用于Linux内核2.6版本及以后的系统。
        /dev/poll:使用于 Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
        Eventport:使用于 Solaris 10. 为了防止出现内核崩溃的问题, 有必要安装安全补丁。

转载于:https://my.oschina.net/kangweb/blog/1635396

你可能感兴趣的文章
VC++获得微秒级时间的方法与技巧探讨(转)
查看>>
HDOJ-1010 Tempter of the Bone
查看>>
MySQL my.cnf参数配置优化详解
查看>>
HDU/HDOJ 2102 A计划 广度优先搜索BFS
查看>>
JavaNIO基础02-缓存区基础
查看>>
阿里 Blink 正式开源,重要优化点解读
查看>>
日本开设无人机专业,打造无人机“人才市场”
查看>>
Exchange 2013 EAC之管理员重置普通用户密码
查看>>
三线跑酷例子BlocksRun的技术点
查看>>
如何应对DDOS网络攻击
查看>>
新闻奖颁给了一个写稿机器人(来自新华社)
查看>>
Android应用程序在新的进程中启动新的Activity的方法和过程分析
查看>>
中文字符 与 十六进制Unicode编码 相互转换
查看>>
防止程序重复执行 Controling the number of application instances
查看>>
Android 网络请求超时处理方案
查看>>
05 管理员工和工作
查看>>
Objective-C语法之NSArray和NSMutableArray
查看>>
[原创]浅谈测试行业发展趋势及个人职业规划的一点看法
查看>>
Android EditText 赋值与取值
查看>>
集成 IBM Business Process Manager V8 与企业内容管理系统
查看>>