常见的性能分析工具

计算机系统由4个模块组成,分别是CPU,网络,磁盘,内存。在程序或者系统出现问题时,应该按照一定的先后顺序镜像排查。并且查看他们当前的使用状况。

vmstat命令

常见的Linux/UNIX监控工具,可以通过给定时间间隔来展示服务器的状态,包括CPU使用率,内存使用率,虚拟内存交换情况,I/O读写情况。相比top,用户可以看到整个机器CPU,内存,I/O的使用情况。

  1. yum install -y sysstat #安装
  2. vmstat #直接输入命令查看信息
  3. vmstat 2 #每两秒采集一次,通过Ctrl+C退出

image.png

  • procs

    r:等待运行的进程数,多少个进程分到了CPU,一般不超过CPU个数是正常的值 b:处于非中断睡眠状态的进程数,即在等待资源分配的进程数,阻塞状态(等待IO)

  • memory:swpd列显示了多少块被换出的磁盘(页面交换),剩下的列显示了多少块是空闲的,多少块正在被用作缓冲区,多少块正在被用作操作系统的缓存

    swpd:虚拟内存已经使用的大小,如果大于0,表示机器的物理内存不足,如果不是程序内存泄露的原因,那么就要升级内存或者把消耗内存的任务迁移到其他机器 free:空闲的物理内存的大小 buff:用作缓存的内存数,缓存是文件目录基本内容,在磁盘中的位置,权限等 cache:用作文件缓存的内存数,对打开的文件进行缓存,提高执行效率和使用性能

  • swap:显示交换活动:每秒有多少块正在被换入(从磁盘)和换出(到磁盘)

    si:从磁盘交换到内存的交换页数量,即每秒使用的虚拟内存数量 so:从内存交换到磁盘的交换页数量

  • io:显示了多少块从设备读取(bi)和写出(bo),通常反映了硬盘的IO

    bi:发送到块设备,一般为硬盘的块数 bo:从块设备接收到的块数

  • system:显示每秒中断in和上下文切换cs的位置

    in:每秒中断次数,包括时钟中断 cs:每秒上下文切换的次数

  • cpu:显示所有CPU时间花费在各类操作的百分比,包括执行用户代码,执行系统代码,空闲以及等待I/O

    us:用户CPU使用时间 sy:系统CPU使用时间,如进行I/O操作等 id:空闲时间 wt:等待I/O的CPU时间,一般为0

sar系统活动取样命令

Linux全面的系统性能分析工具之一,可以从多方面对系统活动进行报告,包括文件的读写情况,系统调用的使用情况,磁盘I/O,CPU效率,内存使用情况,进程活动和IPC有关活动等。获得的数据结果可以存入文件,并且所需负载很小。

查看内存使用率

  1. sar -r 1 3

image.png

  • kkbmemfree:可用的空闲内存大小
  • kbmemused:已使用的内存大小(不包含内核使用的内存)
  • %memused:已使用内存的百分数
  • kbbuffers :内核缓冲区(buffer)使用的内存大小
  • kbcached :内核高速缓存(cache)数据使用的内存大小
  • kbswpfree :可用的空闲交换空间大小
  • kbswpused:已使用的交换空间大小
  • %swpused:已使用交换空间的百分数
  • kbswpcad :交换空间的高速缓存使用的内存大小
  • kbcommit 保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区)
  • commit 这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值

查看CPU使用率

可以在日志文件/var/log/sysstat

  1. sar -u 2 1

image.png

  • %user #用户空间的CPU使用
  • %nice 改变过优先级的进程的CPU使用率
  • %system 内核空间的CPU使用率
  • %iowait CPU等待IO的百分比
  • %steal 虚拟机的虚拟机CPU使用的CPU
  • %idle 空闲的CPU
  • 在以上的显示当中,主要看%iowait和%idle,%iowait过高表示存在I/O瓶颈,即磁盘IO无法满足业务需求,如果%idle过低表示CPU使用率比较严重,需要结合内存使用等情况判断CPU是否瓶颈。

iostat 性能分析命令

用于报告CPU统计信息和整个系统,适配器、tty设备、磁盘和CD-ROM的输入/输出统计信息,默认显示与vmstat相同的CPU使用信息

命令效果显示

  1. iostat

image.png

  • %user:cpu处在用户模式下的时间百分比
  • %nice:cpu处在NICE至的用户模式下的时间百分比
  • %system:xpu处在系统模式下的时间百分比
  • %iowait:cpu等待输入输出完成时间段哦百分比
  • %steal:虚拟cpu的无意识等待时间百分比
  • %idle:cpu空闲时间百分比

显示磁盘的详细信息

  1. iostat -d -x -k 1 10
  2. -x:显示详细信息
  3. -k:以KB为单位显示
  4. -d:显示磁盘使用情况

image.png

  • rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
  • wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
  • r/s: 每秒完成的读 I/O 设备次数。即 rio/s
  • w/s: 每秒完成的写 I/O 设备次数。即 wio/s
  • rsec/s: 每秒读扇区数。即 rsect/s
  • wsec/s: 每秒写扇区数。即 wsect/s
  • rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
  • wkB/s: 每秒写K字节数。是 wsect/s 的一半。
  • avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
  • avgqu-sz: 平均I/O队列长度。
  • await: 平均每次设备I/O操作的等待时间 (毫秒)。
  • svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
  • %util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比

top 性能监控命令

image.png

内部命令

  • S:改变画面更新频率
  • i:开启或关闭第一部分第一行top信息的表示
  • t:开启或关闭第一部分第二行Tasks和第三行CPUS信息的表示
  • m:开启或关闭第一部分第四行Mem和第五行Swap信息的表示
  • N:以PID大小的顺序排列表示进程列表
  • P:以CPU占用率大小的顺序排列进程表
  • M:以内存占用率大小的顺序排列进程列表
  • h:显示帮助
  • n:在进程列表所显示进程的数量
  • q:退出top
  • s:改变画面更新周期

    htop top的升级版

简介

大家可能对top监控软件比较熟悉,今天我为大家介绍另外一个监控软件Htop,姑且称之为top的增强版,相比top其有着很多自身的优势。如下:

  1. 两者相比起来,top比较繁琐
  2. 默认支持图形界面的鼠标操作
  3. 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行
  4. 杀进程时不需要输入进程号等

安装

  1. yum install -y htop #安装工具包

使用

  1. htop #即可进入htop界面

image.png

以上各项分别为:

  1. PID:进行的标识号
  2. USER:运行此进程的用户
  3. PRI:进程的优先级
  4. NI:进程的NICE值,默认的为0,可以进行调整
  5. VIRT:进程占用的虚拟内存值
  6. RES:进程占用的物理内存值
  7. SHR:进程占用的共享内存值
  8. S:进程的运行状况,R表示正在运行、S表示休眠,等待唤醒、Z表示僵死状态
  9. %CPU:该进程占用的CPU使用率
  10. %MEM:该进程占用的物理内存和总内存的百分比
  11. TIME+:该进程启动后占用的总的CPU时间
  12. COMMAND:进程启动的启动命令名称

热键

image.png

Htop设定

鼠标点击或者按下F2

image.png

可以对排列样式,颜色,显示信息进行更改。

ps实时监控系统命令

检测后台程序的占用情况

ps命令显示进程的状态,但不是动态连续的。ps命令是强大的进程查看命令。使用该命令可以确定进程运行的状态,进程是否结束,有没有僵尸进程,那些进程占用了过多的资源。

-a:显示同一终端下的所有程序
-u:uid or username 选择有效的用户ID或者是用户名
-x:显示没有控制终端的进程,同时显示各个命令的具体路径,dx不可一起用

  1. ps -axu

-e:显示所有进程
-f:全部列出,通常和其他选项一起连用

  1. ps -ef

netstat 监控网络状态命令

查看正在监听的进程,端口号,TCP/UDP服务。

netstat是控制台命令,是一款监控TPC/IP网络的工具,它可以显示路由表,实际的网络连接以及每一个网络接口设备的状态信息。netstat用于显示与TCP IP UDP ICMP相关的统计数据,一般用于检验本机各端口的网络连接情况。

最常用的命令
-n:以网络IP地址代替名称,显示出网络连接情形
-t:显示TCP连接的情况
-l:显示正在监听的端口进程
-p:显示建立相关连接的程序名和PID
-u:显示UDP协议的连接情况
-a:显示所有套接字

  1. netstat -ntlpua

显示所有端口统计信息

  1. netstat -s

显示所有监听unix端口

  1. netstat -lx

显示路由信息

  1. netstat -r

显示网络接口列表

  1. netstat -i