linux性能排查以及优化方法

一.影响性能的因素

1.系统硬件资源

  (1) CPU

      多核 或超线程

  (2) 内存

         物理内存和swap设定

   (3) 磁盘I/O   

      RAID技术/SSD磁盘

  (4) 带宽

  • 网卡/交换机的选择
  • 操作系统双网卡绑定

2.操作系统
    (1)内核参数优化
       ulimit -n(最大打开文件数)
       ulimit -u(最大用户数)
    (2)文件系统优化

  • ext2:linux 下标准文件系统,无日志记录(inode)功能。
  • ext3:在ext2 基础上增加了日志记录功能(inode),仅支持 32000 个子目录
  • ex4:ext3 的后续版本,Linux2.6.28 内核开始支持。无限子目录支持,快速 fsck。
  • xfs:高性能文件系统,linux3.10 内核开始默认支持。

        推荐:读操作频繁,同时小文件众多的应用:首选 ext4 文件系统,接下来依次是 xfs、ext3写操作频繁的应用,首选是 xfs,接下来依次是 ext4 和 ext3对性能要求丌高、数据安全要求丌高的业务,ext3 是比较好的选择

二、性能优化工具

1.cpu 性能评估

vmstat  使用方式 vmstat 5 5 ,每隔5秒采样一次,共采集5次

linux性能排查以及优化方法

Procs(进程):

  •   r: 运行队列中进程数量,如果这个值长期大于cpu个数,说明CPU不足
  •   b: 等待IO的进程数量,比如磁盘I/O,网络I/O

Memory(内存):

  •   swpd: 使用虚拟内存大小
  •   free: 空闲内存大小
  •   buff: 缓冲去内存大小,一般对块设备的读写需要缓冲
  •   cache: 用作缓存的内存大小,是存在于cpu和内存之间的缓冲区,存放的是从disk上读取到的数据

Swap:

  •   si: 每秒从磁盘读入虚拟内存的大小
  •   so: 每秒虚拟内存写入磁盘的大小

IO:

  • bi: 每秒读取的总块数(读磁盘)
  • bo: 每秒写入的总块数(写磁盘)

         经验参考:bi+bo 参考值为 1000,如果超过 1000,而且 wa值较大,则表示系统磁有问题

system 

  •  in 列表示在某一时间间隔中观测到的每秒设备中断数。
  •  cs 列表示每秒产生的上下文切换次数。

上面这 2 个值越大,会看到由内核消耗的 CPU 时间会越多。

CPU

  • us 列显示了用户进程消耗的 CPU 时间百分比。us 的值比较高时,说明用户进程
  • 消耗的 cpu 时间多,但是如果长期大于 50%,就需要考虑优化程序或算法。

 根据经验,us+sy的参考值为 80%,如果 us+sy大于 80%说明可能存在 CPU 资源
 不足。

  • id 列显示了 CPU 处在空闲状态的时间百分比。
  • wa 列显示了 IO 等待所占用的 CPU 时间百分比。wa 值越高,说明 IO 等待越严
    重,根据经验,wa 的参考值为 20%,如果 wa 超过 20%,说明 IO 等待严重,
    引起 IO 等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者磁盘控制
    器的带宽瓶颈造成的(主要是块操作)。

2、内存性能评估

    free命令是监控 linux 内存的常用命令

    使用方法 free -m

linux性能排查以及优化方法

-m参数表示以M为单位查看内存的使用情况,一般关注可用内存

可用内存=free +buffer+cache

经验参考:

      应用程序可用内存/系统物理内存>70%时,表示系统内存资源非常充足,不影响系统性能,应用程序可用内存/系统物理内存<20%时,表示系统内存资源紧缺,需要增加系统内存,20%<应用程序可用内存/系统物理内存<70%时,表示
 

3.磁盘性能

   iostat是监控linux常用的命令,用法iostat -d 3   5

linux性能排查以及优化方法

  • Blk_read/s 表示每秒读取的数据块数。
  • Blk_wrtn/s 表示每秒写入的数据块数。
  • Blk_read 表示读取的所有块数
  • Blk_wrtn 表示写入的所有块数。

4.网络性能评估

   (1)ping

     Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性

     linux性能排查以及优化方法

   主要看是否看是否丢包,或者延迟

(2)traceroute

跟踪网络路由状态,当然每次数据包从同样的出发点(source)到达目的地(destination)走的路径可能会不一样

常用命令:traceroute -p 6111 web.sendcloud.net

linux性能排查以及优化方法