nginx的性能优化的概述

软件层面的提升硬件的使用率

增大CPU的利用率

增大内存的利用率

增大磁盘IO利用率

增大网络带宽利用率

提升硬件规格

网卡:万兆网卡、例如10G、25G、40G等

磁盘:固态硬盘,关注IOPS和BPS指标

CPU:更快的主频,更多的核心,更大缓存,更优的架构

内存:更快的访问速度

超出硬件上限后使用DNS

如何增大Nginx使用CPU的有效时长

能够使用全部CPU资源

master-worker进程架构

worker进程数量应当大于等于CPU核数

nginx进程之间不做无用功浪费CPU资源

worker进程不应该在繁忙时,主动退出CPU

worker进程间不应由争抢造成资源消耗

worker 进程数量应当等于CPU核数

worker进程不应调一些API导致主动让出CPU

拒绝类似的第三方模块

不被其他进程争抢资源

提升worker进程的优先级占用CPU更长时间

减少操作系统上耗资源的非nginx进程

设置worker进程数量的指令

Syntax: worker_processes number | auto;
Default: worker_processes 1; 指定worker进程数量
Context: main

为何一个CPU就可以同时运行多个进程

宏观上并行,微观上串行

把进程运行时间分为一段段的时间片

OS调度系统依次选择每个进程,最多执行时间片指定的时长

阻塞API引发的时间片内主动让出CPU

速度不一致引发的阻塞API

硬件执行速度不一致,例如CPU和磁盘

业务场景产生的阻塞API

例如同步读取网络报文

确保进程在运行态

R运行:正在运行或在运行队列中等待

S中断:休眠中,受阻,在等待某个条件的形成或接受到信号

D不可中断:收到信号不换醒和不可运行,进程必须等待直到有中断发生

Z僵死:进程已终止,但进程描述符存在,直到父进程调用wait4()系统调用后释放

T停止:进程收到SIGSTOP、SIGSTP、SIGTIN、SIGTOU 信号后停止

减少进程间的切换

nginx worker进程尽可能的处于R状态

R状态的进程数量大于CPU核心时,负载急速增高

[root@python ~]# uptime
10:51:14 up 17:22, 1 user, load average: 0.00, 0.01, 0.05 top
top - 10:50:43 up 17:22, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 103 total, 1 running, 102 sleeping, 0 stopped, 0 zombie

尽可能减少进程间切换

何为进程间切换

是指CPU从一个进程或者线程切换到另一个进程或者线程

类别:主动切换 被动切换

Cost < 5us 进程切换代价,5微妙

减少主动切换

减少被动切换

增大进程优先级

绑定CPU

延迟处理新连接

使用TCP_DEFER_ACCEPT 延迟处理新连接

指令

listen address[:port] [deferred];
Default: listen *:80 | *:8000;
Context: server
Syntax:

  如何查看上下文切换次数vmstat

[root@python ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1229020 2108 481792 0 0 2 2 17 18 0 0 100 0 0

  dstat查看进程上下文切换

[root@python ~]# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 100 0 0 0|4898B 5452B| 0 0 | 0 0 | 34 37
0 0 100 0 0 0| 0 12k| 60B 826B| 0 0 | 56 79
0 0 100 0 0 0| 0 0 | 60B 346B| 0 0 | 38 57
0 0 100 0 0 0| 0 0 | 60B 346B| 0 0 | 42 58
0 1 99 0 0 0| 0 0 | 60B 346B| 0 0 | 55 65
0 0 100 0 0 0| 0 0 | 60B 346B| 0 0 | 52 71
0 0 100 0 0 0| 0 4096B| 60B 346B| 0 0 | 42 61

  针对进程查看

[root@python ~]# pidstat  -w -p 30170 1
Linux 3.10.0-957.el7.x86_64 (python) 2019年07月19日 _x86_64_ (2 CPU)
主动切换 被动切换
11时33分15秒 UID PID cswch/s nvcswch/s Command
11时33分16秒 997 30170 0.00 0.00 nginx
11时33分17秒 997 30170 0.00 0.00 nginx
11时33分18秒 997 30170 0.00 0.00 nginx

  控制CPU时间的片大小

Nice 静态优先级-20-19 越小有优先级越高
Priority 动态优先级 0-139 #define DEFAULT_PRIO (MAX_RT_PRIO + NICE_WIDTH /2)
[root@python ~]# top
top - 11:49:18 up 18:20, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 107 total, 1 running, 106 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 5.6 sy, 0.0 ni, 94.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1863252 total, 1198048 free, 174916 used, 490288 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 1481828 avail Mem
动态 静态
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30186 root 20 0 162020 2192 1548 R 5.6 0.1 0:00.03 top

  设置work进程静态优先级指令

Syntax: worker_priority number;
Default: worker_priority 0; 默认是零,设置优先级最高的话调到-20
Context: main

  worker进程间的负载均衡

如何打开此功能

listen指令后加reuseport

  CPU缓存命中率;worker进程绑定到CPU指令

Syntax: worker_cpu_affinity cpumask ...; worker_cpu_affinity auto [cpumask];
Default: —
Context: main

  

最新文章

  1. 在做基于LBS应用的一些随笔
  2. toad的基本操作
  3. 带你看懂Dictionary的内部实现
  4. WorkbookDesigner mvc里面返回file
  5. [Angular 2 Router] Configure Your First Angular 2 Route
  6. 常用对象API、附加:集合补充
  7. java静态代理,动态代理,cglib代理
  8. 为什么喜欢Kindle
  9. [cpp]伯乐在线编程挑战第 0 期 – 呼叫转移系统
  10. Win10安裝weblogic12C
  11. idea 导eclipse项目
  12. 学习day01
  13. 13、属性的get(存)和set(取)器
  14. PHP 依赖注入和控制反转再谈(二)
  15. LwIP Application Developers Manual4---传输层之UDP、TCP
  16. HttpRunnerManager使用(一)
  17. android 控件获取 获取焦点
  18. Flutter - JSON to Dart,一个json转dart实体的网站
  19. 0_Simple__simpleOccupancy
  20. Linux系统重要的开机自启动的服务

热门文章

  1. 论STA | SOCV / POCV 之 variation (2)
  2. Hadoop3.1.1源码Client详解 : 入队前数据写入
  3. Codeforces Gym 102392F Game on a Tree (SEERC2019 F题) 题解
  4. Bugku-CTF加密篇之凯撒部长的奖励(就在8月,超师傅出色地完成了上级的特遣任务,凯撒部长准备给超师傅一份特殊的奖励.......)
  5. cent os 7.3修改mac地址方法
  6. The Preliminary Contest for ICPC Asia Shenyang 2019 C Dawn-K's water (完全背包)
  7. ScheduledThreadPoolExecutor与Timer
  8. WLC配置LAG
  9. 洛谷P1734 最大约数和(01背包)
  10. 启动ubuntu就直接进入GRUB2.02的命令行界面的问题