如何通过top发现性能问题
在性能测试时,Linux操作系统中可以通过top命令来发现和定位服务器性能消耗的问题。
执行top命令后获取到的数据如下图所示
- 第1行显示的是系统运行信息:系统当前时间为 15:51:06、系统运行了163天22小时58分钟、当前登录的用户有1个、系统的平均负载压力情况为:0.19(最近1分钟内的平均负载压力),0.30(最近5分钟内的平均负载压力)和0.38(最近15分钟内的平均负载压力)。这个平均负载压力(load average )的数值是每隔5 秒钟检查一次活跃的进程数,然后按特定算法计算出来的。一般当这个数值除以 CPU 的核数得到的值大于 3~5时,就表明系统的负载压力已经超高了,最好不要超过1。
- 第2行显示的是任务信息:总共 168个进程、1个进程正在占用CPU 处于运行状态、166个进程正在休眠中、0个进程停止、1个进程假死。一般在这行信息中我们首要关注的是系统当中有没有僵尸进程。
- 第3行显示的是 CPU 的运行信息:5.6 us 表示用户模式下CPU占用比为 5.6%, 3.5 sy 表示系统模式下CPU占用比为 3.5%,0.0 ni 表示改变过优先级的进程的CPU占用比为 0.0%,90.6 id 表示空闲状态的CPU占用比为 90.6%,0.2 wa 表示因为I/O等待造成的CPU占用比为 0.2%,0.0 hi 表示硬中断的CPU占用比,0.0 si 表示软中断的CPU的占用比。0.0st表示CPU等待虚拟机调度的时间占比,这个指标一般在虚拟机中才会有,在物理机中该值一般维持为 0,即被虚拟机占用的CPU时间比例。
当us很高时,证明CPU时间主要消耗在用户代码,需要优化用户代码。sy很高时,说明CPU时间都消耗在内核,要么是频繁的系统调用,要么是频繁的CPU切换(进程切换/线程切换)。wa很高时,说明有进程在频繁的IO操作,有可能是磁盘IO,也有可能是网络IO。si很高时,说明CPU时间消耗在处理软中断,网络收发包会触发系统软中断,所以大量的网络小包会导致软中断的频繁触发,典型的SYN Floor(SYN洪泛攻击)会导致si很高。
- 第4行显示的是物理内存的使用信息:2046816 total 表示物理内存的总量,92232 free表示物理内存的空闲大小,1112060 used 表示已使用的物理内存的大小,842524 buff/cache 表示用于缓存的物理内存的大小,1479036 avail Mem 表示可供使用的内存大小。avail mem 是创建新进程时,在不使用swap分区的情况下,能够分配的内存大小。这个大小可能比当前的free还大,这是因为buff/cache中的内存在创建进程时,若需要,也是可以抢占过来的。
- 第5行显示的是虛拟内存(swap)的使用信息:0 total 表示虚拟内存空间的大小,0 free 表示空闲的虚拟内存空间的大小,0 used 表示已使用的虛拟内存空间的大小,这三个值都为0表示系统关闭了swap功能。交换区其实是硬盘,并非内存,swap原理就是把一块磁盘空间当成内存来使用。当交换区存在数据时说明物理内存不够了。对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
- 第7行显示的是每个进程的资源消耗信息,详情如下表所示
列名 说明 PID 进程ID编号 USER 进程的持有用户 PR 进程运行的优先级,值越小优先级就越高,会越早获得 CPU 的执行权 NI 进程的 nice 值,表示进程可被执行的优先级的修正数值 VIRT 进程使用的虚拟内存总大小,单位为KB RES 进程使用的并且未被虚拟内存换出的物理内存大小,一般也称为常驻内存,单位为 KB SHR 进程使用的共享内存大小,单位为 KB S 进程当前的运行状态。D:不可中断的睡眠状态,R:运行中,S:休眠中,T:跟踪/停止 %CPU 进程运行时 CPU 的占用比 %МЕМ 进程使用的内存占用比 TIME+ 进程占用的 CPU 的总时长 COMMAND 正在运行的命令
top 命令支持的其他常用参数如下:
- top -p 查看指定进程ID的top信息,例如执行top -p 2081 可以查看进程编号为2081的top信息。
- top -H -p 查看指定进程ID的所有线程的top信息,此时列表中的PID显示的是线程的ID编号。例如执行top -H -p 2081 可以查看进程编号为2081的所有线程的top信息。