性能调优简介

性能调优

CPU

平均负载

  • 查看

    • uptime, w, top
  • 定义

    • 单位时间内,系统中处于可运行状态和不可中断状态的平均进程数。即单位时间的活跃进程数
  • 可运行状态的进程

    • 正在使用cpu或者正在等待cpu的进程,即ps aux命令下STAT处于R状态的进程
  • 不可中断状态的进程

    • 处于内核态关键流程中的进程,且不可被打断,如等待硬件设备IO响应,ps命令D状态的进程
  • 判断指标

    • 理想状态

      • 每个cpu上都有一个活跃进程,即平均负载数等于cpu数
    • 过载经验值

      • 一般来说,当平均负载高于cpu数量70%的时候,就应该引起重视了. 一旦负载过高,就可能导致响应变慢,进而影响服务的正常功能

CPU使用率

  • 查看

    • top, pidstat, grep ^cpu /proc/stat
  • 定义

    • 除了空闲时间外的其他时间占总 CPU 时间的百分比
  • 字段

    • us (user) - 用户态cpu时间. 注意它不包括下面的nice时间, 但包括了guest时间
    • ni (nice) - 低优先级用户cpu时间.也就是进程的nice值被调到了1-19之间时的cpu时间
    • sy (system) - 内核态cpu时间
    • id (idle) - 空闲时间. 注意, 它不包括等待I/O时间
    • wa (iowait) - 等待I/O的cpu时间
    • hi (irq) - 处理硬中断的cpu时间
    • si (softirq) - 处理软中断的cpu时间
    • st (steal) - 当系统运行在虚拟机中的时候, 被其他虚拟机占用的cpu时间
    • guest - 通过虚拟化运行其他操作系统的时间, 也就是运行虚拟机的时间
    • gnice (guest nice) - 低优先级运行虚拟机的时间

优化

  • CPU绑定

    • 把进程绑定在一个或多个CPU上,可提高CPU缓存命中率,减少跨CPU调度带来的上下文切换问题
  • 调整优先级

    • 适当降低非核心应用的优先级, 确保核心应用得到优先处理
  • 为进程设置资源限制

    • 设置进程的CPU使用上限, 可防止由于进程自身的问题耗尽系统资源
  • 中断负载均衡

    • 无论是软中断还是硬中断, 都会耗费大量的CPU资源,开启irqbalance服务或配置smp_affinity, 可把中断处理过程均衡到多个CPU上

内存

优化

  • 最好禁止 Swap

    • 如果必须开启 Swap,降低 swappiness 的值,减少内存回收时 Swap 的使用倾向
  • 减少内存的动态分配

    • 比如,可以使用内存池、大页(HugePage)等。(开发)
  • 尽量使用缓存和缓冲区来访问数据

    • 如可以使用堆栈明确声明内存空间来存储需要缓存的数据(开发);或者用 Redis 这类的外部缓存组件优化数据的访问
  • 限制内存资源

    • 使用 cgroups 等方式限制进程的内存使用情况,确保系统内存不会被异常进程耗尽
  • 设置oom_score

    • 通过 /proc/pid/oom_adj调整核心应用的 oom_score。这样,可以保证即使内存紧张,核心应用也不会被 OOM 杀死

磁盘

优化

  • 应用程序优化

    • 在应用程序内部构建自己的缓存,或者用 Redis 这类外部缓存系统
    • 在需要同步写的场景中,尽量将写请求合并,而不是让每个请求都同步写入磁盘,即可以用 fsync() 取代 O_SYNC
  • 文件系统优化

    • 根据实际负载场景的不同,选择最适合的文件系统
  • 磁盘优化

    • 换用性能更好的磁盘,比如用 SSD 替代 HDD
    • 使用 RAID ,把多块磁盘组合成一个逻辑磁盘,构成冗余独立磁盘阵列
    • 对应用程序的数据,进行磁盘级别的隔离

网络

指标

  • 带宽

    • 链路的最大传输速率,单位通常为 b/s (比特/秒)
  • 吞吐量

    • 单位时间内成功传输的数据量,单位通常为 b/s(比特/秒)或者 B/s(字节/秒)。吞吐量受带宽限制,而吞吐量/带宽,也就是该网络的使用率
  • 延时

    • 从网络请求发出后,一直到收到远端响应,所需要的时间延迟
  • PPS(Packets Per Second)

    • 以网络包为单位的传输速率。通常用来评估网络的转发能力
  • 网络的可用性(网络能否正常通信)、并发连接数(TCP 连接数量)、丢包率(丢包百分比)、重传率(重新传输的网络包比例)

查看

  • 协议栈统计信息

    • netstat -s
  • 网络吞吐量和 PPS

    • sar -n DEV
  • 连通性和延时

    • ping
  • 网络连接数

    • netstat, ss

压测

  • ab测试

    • Apache 自带的 HTTP 压测工具,主要测试 HTTP 服务的每秒请求数、请求延迟、吞吐量以及请求延迟的分布情况等
    • ab -c 500 -n 5000 http://192.168.10.11/ #-c 并发请求数 -n 总请求数
  • wrk测试

    • HTTP 性能测试工具,内置了 LuaJIT,方便你根据实际需求,生成所需的请求负载,或者自定义响应的处理方法

优化

  • 应用程序

    • 使用长连接取代短连接,可以显著降低 TCP 建立连接的成本。在每秒请求次数较多时,这样做的效果非常明显
    • 使用内存等方式,来缓存不常变化的数据,可以降低网络 I/O 次数,同时加快应用程序的响应速度
  • 套接字

  • 传输层

    • TCP优化

      • 增大处于 TIME_WAIT 状态的连接数量 net.ipv4.tcp_max_tw_buckets ,并增大连接跟踪表的大小 net.netfilter.nf_conntrack_max
      • 减小 net.ipv4.tcp_fin_timeout 和 net.netfilter.nf_conntrack_tcp_timeout_time_wait ,让系统尽快释放它们所占用的资源
      • 开启端口复用 net.ipv4.tcp_tw_reuse。这样,被 TIME_WAIT 状态占用的端口,还能用到新建的连接中
      • 增大本地端口的范围 net.ipv4.ip_local_port_range 。这样就可以支持更多连接,提高整体的并发能力
      • 增加最大文件描述符的数量
    • UDP优化

  • 链路层

nginx调优

Nginx运行工作进程数量(worker_processes)

  • 一般设置CPU的核心或者auto, 最多8个,8个以上性能提升不会再提升了,而且稳定性变得更低
  • worker_processes 4;

Nginx运行CPU亲和力(worker_cpu_affinity)

  • 2核CPU: worker_cpu_affinity 01 10;
  • 4核CPU: worker_cpu_affinity 0001 0010 0100 1000;

Nginx最大打开文件数(worker_rlimit_nofile)

  • worker_rlimit_nofile 65535;

连接超时时间

  • keepalive_timeout 60;

    • 客户端连接保持会话超时时间,超过这个时间,服务器断开这个链接

gzip 调优

  • 使用gzip压缩功能,可能为我们节约带宽,加快传输速度,有更好的体验,也为我们节约成本
  • Nginx启用压缩功能需要你来ngx_http_gzip_module模块,apache使用的是mod_deflate

expires 缓存调优

  • 针对于图片,css,js等元素更改机会比较少的情况下使用,特别是图片,占用带宽大

防盗链

内核参数优化(TCP)

  • net.ipv4.tcp_max_tw_buckets = 6000

    • 操作系统允许TIME_WAIT套接字数量的最大值,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。该参数默认为180000,过多的TIME_WAIT套接字会使Web服务器变慢。注:主动关闭连接的服务端会产生TIME_WAIT状态的连接
  • net.ipv4.ip_local_port_range = 1024 65000

    • 允许系统打开的端口范围
  • net.ipv4.tcp_tw_recycle = 1

    • 启用timewait快速回收
  • net.ipv4.tcp_tw_reuse = 1

    • 开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。这对于服务器来说很有意义,因为服务器上总会有大量TIME-WAIT状态的连接
  • net.ipv4.tcp_syncookies = 1

    • 开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理

MySQL调优

代码优化

定位慢SQL,并优化

合理使用索引

分表

集群

缓存

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值