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.05top
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 st1  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

  

转载于:https://www.cnblogs.com/rdchenxi/p/11217294.html

nginx 性能优化的概述及在CPU资源方面的处理相关推荐

  1. 关于nginx性能优化CPU参数worker_cpu_affinity使用说明

    Nginx性能优化CPU参数worker_cpu_affinity使用说明 官方说明:http://wiki.nginx.org/NginxHttpMainModule#worker_cpu_affi ...

  2. linux nginx cpu 高,Linux 系统 Nginx性能优化CPU参数

    Nginx性能优化CPU参数worker_cpu_affinity使用说明 官方说明: worker_cpu_affinity Syntax:worker_cpu_affinity cpumask [ ...

  3. ab测试nginx Nginx性能优化

    转自:https://www.cnblogs.com/nulige/p/9369700.html 1.性能优化概述 在做性能优化前, 我们需要对如下进行考虑 1.当前系统结构瓶颈 观察指标 压力测试 ...

  4. Nginx 性能优化

    Nginx 性能优化有这篇就够了! 1.Nginx运行工作进程数量 Nginx 运行工作进程个数一般设置CPU的核心或者核心数x2.如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/p ...

  5. Nginx 性能优化(吐血总结)

    文章目录 一.性能优化考虑点 1.当前系统结构瓶颈 2.了解业务模式 3.性能与安全 二.系统与Nginx性能优化 1.文件句柄 (1)设置方式 (2)系统全局性修改和用户局部性修改 (3)进程局部性 ...

  6. 分享 11 个常用的 Nginx 性能优化参数工作

    编辑:业余草 来源:https://www.xttblog.com/?p=4957 分享 11 个常用的 Nginx 性能优化参数教程 工作上,需要配置 Nginx,要投入生产使用,做了一点优化工作, ...

  7. Nginx性能优化(超详细)

    目录 一.性能优化考虑点 一.当前系统结构瓶颈 二.了解业务模式 三.系统与Nginx性能优化 1.文件句柄 (1)设置方式 (2)系统全局性修改和用户局部性修改 (3)进程局部性修改 2.cpu的亲 ...

  8. 老司机整理对Nginx性能优化

    Nginx性能优化应遵循一个原则:一次只调整一项,调整不理想,将修改还原. Linux参数 Nginx很多功能直接使用操作系统实现,操作系统决定nginx上限. 现代linux内核(2.6+)涵盖了大 ...

  9. Nginx性能优化之cpu优化

    如何有效的使用cpu? 1.如何增大Nginx使用cpu的有效时长? 能够使用全部cpu资源:master-worker多进程架构,woker进程数量应该大于等于cpu核数 Nginx进程间不做无用功 ...

最新文章

  1. (0092)iOS开发AVAudioRecorder录制音频
  2. python常用内置函数总结-python常用内置函数
  3. C++二维数组new小结(zz)
  4. centos6.5 搭建NFS 服务
  5. C++ STL 中提供的算法
  6. 从外卖员到程序员,自学3年终于转行成功,三面“拿下”拼多多,把经历分享给你们!
  7. vantUI组件:van-card 自定义内容 - 踩坑篇
  8. bzoj3456:城市规划
  9. 【Tomcat】如何优化tomcat配置(从内存、并发、缓存4个方面)优化
  10. spark的集群安装
  11. 三点估算法_三点估算
  12. notes:poco httpserver and httpclient
  13. qt生成程序以管理员身份运行和取消以管理员身份运行方式
  14. Leetcode 1144
  15. ImageNet Classification with Deep Convolutional Neural Networks(AlexNet论文翻译(附原文))
  16. 使用Spring 定时器 + selenium打卡
  17. NFC的读写卡模式——前台调度系统
  18. day 18 C# 窗体普通计算器
  19. 51单片机之程序模块化
  20. 使用Jenkins Pipeline插件和Docker打造容器化构建环境

热门文章

  1. android 编译 bison,Ubuntu搭建android编译环境问题总结
  2. 汽车租赁php参考文献,国内外汽车租赁文献综述
  3. python eval
  4. Python 偏函数
  5. 2.1 Mini-batch 梯度下降法
  6. 在 里面_适合县城里面加盟的鞋店推荐
  7. c语言 课程作业答案,《C语言程序设计A》课程形成性考核作业一参考答案
  8. RoterOS负载均衡教程
  9. Docker学习总结(38)——开发环境中使用docker run安装Redis再总结
  10. Maven学习总结(22)——Maven常用插件介绍