常用性能分析命令


性能分析命令

top

# 按大写的H,切换显示进程
?
# 按大写的E,切换展示Mem内存,和swap交换分区的单位
?
# 按小写的e,切换展示虚拟内存、物理内存、共享内存的单位
?
# 按n再按数字,比如4;展示占用进程最多的4个,输入0恢复全部的

 

task:zombie 僵尸进程

load average(系统平均负载): 过去1分钟、 过去5分钟、过去15分钟系统的平均负载

load average【系统的负载值】: CPU负载 + io负载

cpu使用率:说的是 系统所有cpu使用率之和,不管你多少cpu,它是一个整体所有cpu的总使用率, 不是单独某一个cpu的使用率。

所以,我们一般,不关心具体某一个 某一些cpu的使用率

  • cpu

    • wa:cpu再等待某些资源时间比(wa等待IO、CPU的时间)如果这个值很大,就要进一步考虑磁盘是否有问题了

      • 可以通过iostat 进一步分析是磁盘读问题还是写的问题
        • 写问题
          • 数据库分区分表,写入到不同的磁盘上减轻磁盘的压力
          • 磁盘矩阵、或者加磁盘(不到无法优化的时候不加) 
        • 读问题(磁盘更多出现的就是读问题)
          • 首先看能不能优化SQL
          • 增大buff(buff:缓冲区,是由磁盘虚拟出来,用于加快从磁盘读的速度)
          • 磁盘矩阵
    • hi(hard interrupt)硬中断

    • si(soft intertupt)软中断

buff/cache: 缓冲区/缓存

  • buff缓冲区,是磁盘上虚拟出来的一个空间,用于加快从磁盘读取数据的速度,不能加快写的速度

  • cache缓存, 内存缓存 cpu缓存,是加快数据的交换速度

swap 交换分区

  • 由磁盘虚拟而来,一般是 内存条大小的 2 倍

  • swap分区,是用于临时存在内存中数据的, 在内存不足的时候,临时把内存中的数据,转移到swap服区暂存

进程列表中 PR 越小,优先级越高

  • VIRT、RES、SHR:进程的内存大小

    • virtual 虚拟的 VIRT 虚拟内存大小

    • res: 物理内存 这个进程所使用物理内存大小

    • share: 分享 共享内存

ps

ps -ef 
ps -ef | grep  # 进程名称
ps -ef |grep java
jps
ps -elf # 显示线程信息(不常用)

 

vmstat

监控显示 虚拟内存、进程、cpu活动进行监控

vmstat --help
vmstat [options] [delay [count]]
vmstat 1 5   # 间隔1秒,收集1次数据,总共收集5次,就会停止
  • procs 进程

    • r(runnable ):多少进程在等待,在运行队列中等待的进程数

      • 如果这个r值很大,就说明目前有很多进程再等待cpu处理;如果这个值很大,同理,如果cpu的idea的值也很大,那说明目前cpu比较空闲,而造成r值的原因就是磁盘可能出现问题拉

      • 这个数值和cpu的核数进行比较,大一点没问题,比如8核的;目前这个值是16,那说明分摊到每个CPU也就2个等待;如果是16核的,那分摊

        到每个cpu也就1个等待

      • 解决

        • 1、增加cpu

        • 2、减少进程/或线程(关闭一些没必要的服务-也可以把这台服务器的进程部署(迁出[移])到另外其它的服务器)、最后看代码能不能从多线程方面进行优化

    • b(blocked):多少进程在不可中断的休眠,在等待io的进程数

      • 也可以理解为进程的阻塞
      • 进程资源不被释放,随时都有可能被唤启,进行处理

      • 通常意味着他们在等待io,例如磁盘,网络,用户输入,等等)

    • swpd
      • 表示过去交换分区使用的大小(也就是虚拟内存),交换分区是有磁盘虚拟出来的,当出现内存不足时用于临时存储内存的资源,所以swp如果大于0,则表示你的机器物理内存不足了(因为这个虚拟内存有数值了),如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器
    • memory

      • swpd:多少块被换出到了磁盘(页面交换)

      • free 空闲,没有使用的内存

      • buff 缓冲区 从磁盘虚拟出来,用于存储一些数据,加快从磁盘读数据的速度

      • cache 缓存 cpu(L1,L2,L3)三级缓存、内存缓存,加快数据交换

    • swap 交换分区

      • si(input) 每秒有多少块正在被换入内存(从交换分区里面的资源换入到内存里面),从磁盘交换到内存的交换页数量(kb/s)

      • so (out) 正在被换出到磁盘(从内存交换到磁盘的交换页数据(kb/s))

    • io 磁盘的读写,单位KB/S,通常反映了硬盘I/O

      • bi (binary input) 从磁盘读的速度、显示了多少块从块设备读取,块设备是指系统上所有的磁盘和其他块设备

      • bo (binary out)写数据到磁盘的速率

    • system 系统

      • in(interrupt)中断

        • 硬中断hi(hard interrupt)

        • 软中断si(soft interrupt)

        • 比如cpu读取内存里面的资源的时候,内存里面没有了,内存要去磁盘中获取,造成的一种中断

      • cs(Context Swich)上下文切换

        • 自愿上下文

        • 非自愿上下文

    • cpu

      • st:比如控制单元控制计算的所占用的管理时间

mpstat

实时监控工具,主要报告与cpu相关统计信息

yum install sysstat -y
# sysstat 性能分析工具包集,这个工具包中,有很多性能分析命令,大多带 stat sar
?
mpstat [ 选项 ] [ <时间间隔> [ <次数> ] ]
?
# 3秒获取一次所有的监控数据,-P {cpu l ALL},表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
mpstat -P ALL 3    
?
mpstat 1 5  # 每间隔1秒钟,收集1次数据,总共收集5次,最后会给出一个平均值
  • %irq:硬中断时间

  • %soft:软中断时间

pidstat

监控全部或指定进程的cpu、内存、线程、设备io等资源占用情况和上下文切换信息

pidstat 1 5
# -u cpu
# -w(context swich) 显示每个进程的上下文切换情况
pidstat -u -w 1 3
cswch/s   # 自愿上下文数据
nvcswch/s  # 非自愿上下文数据

netstat(查看网络)

一般用于检验本机各端口的网络连接情况

  • -a 显示所有的socket连接

  • -n 用数字的方式显示连接

  • -p 进程

  • netstat -anp 可以查案所有进程和进程的服务id

    • netstat -anp |grep "进程关键词或端口mysql 或 3306" 通过关键词过滤查找进程

iostat

显示设备,分区和网络文件系统的CPU统计信息和输入/输出统计信息

yum install sysstat -y
man iostat # 查看帮助
iostat 1    # 间隔1秒钟 收集1次磁盘的数据
iostat -c 1  # 间隔1秒钟,收集1次cpu的相关统计数据
iostat -dmx 1
  • Device: 磁盘(sd代表固态硬盘、hd代表机械硬盘)

    • rrqm/s 在磁盘上每秒读请求的大小

    • wrqm/s 对磁盘每秒进行的 写 操作的大小

    • r/s 每秒发送给磁盘的读的请求次数

    • w/s 每秒发送给磁盘的写的请求次数

    • rMB/s 每秒读多少数据

    • wMB/s 每秒写多少数据

    • avgrq-sz 请求的扇区数量

    • avgqu(queue)-sz 设备的等待请求数量也就是(等待请求队列)

    • svctm 请求的时间

dstat

  • 是一个用例替换vmstat、iostat等命令的工具,功能比较全,有彩色的界面

  • 是一个综合的命令

yum install dstat -y
?
dstat -cmdrylp
-c cpu
-m 内存
-d 磁盘
-r 换入换出
-y 系统
-p 进程

在使用linux性能分析命令来分析服务器性能情况时,一般,先用top、dstat命令,查看数据整体情况,发现有异常数据,然后,再使用具体的命令去发现异常数据