一、性能观测工具
1. pidstat 进程状态观测
1.1. 选项解释
筛选
-p <pid>
: 进程id号,不指定就显示所有的进程
信息统计
-r
: 显示内存使用情况和页错误-u
: 显示cpu使用情况-d
: 显示io使用情况-s
: 展示栈使用情况,kB为单位,保留和使用的大小-R
: 展示实时优先级和调度策略信息-v
: 展示一些内核表的值,线程数和fd分配-w
: 展示任务调度情况,每秒自愿调度的上下文切换(资源被占用导致阻塞)和非自愿调度上下文切换(在自己时间片内被强制放弃cpu)
显示相关
-h
: 指定多个统计后,将统计结果显示在一行里面-H
: 使用时间戳显示时间,默认时间显示的是03:22:38 PM
1.2. 内存观测
1 | 观测pid 1584925的内存情况,每秒输出一次 |
minflt/s
: 任务每秒发生的小故障总数,这些小故障不需要从磁盘加载内存页。majflt/s
: 任务每秒发生的主要故障总数,这些故障需要从磁盘加载内存页。VSZ
: 虚拟大小(Virtual Size),整个任务的虚拟内存使用情况,单位为KByte。RSS
: 常驻集大小(Resident Set Size),任务使用的未交换的物理内存,单位为KByte。
RSS/PSS/VSZ
一个进程有500K的代码并且链接了2500K的共享库,然后有200K的堆栈分配。其中有400K自身的代码、1000K的共享库以100K的堆栈内存被加载在实际内存(RAM)中,并且系统中一共有两个进程用了同样的共享库。那么:
VSZ:500K + 2500K + 200K = 3200K
RSS:400K + 1000K + 100K = 1500K
PSS:400K + (1000K / 2) + 100K = 1000K
1.3. 进程io写入情况统计
1 | 统计进程io使用情况,5秒输出一次,一共输出1次 |
2. top 类似任务管理器
2.1. 选项解释
-p <pid>
: 只显示某个进程,不指定就显示所有进程
2.2. 几个快捷键
Shift + E
: 调整内存单位1
: 切换cpu统计模式,所有/详细Shift + P
: cpu占用排序Shift + M
: 内存占用排序m
: 切换内存显示样式c
: 显示进程详细命令
2.3. 显示内容解释
1 | top - 16:01:03 up 1 day, 16:45, 13 users, load average: 2.45, 2.09, 2.23 |
1) 参数含义
PR
: 进程的优先级,数值越小表示优先级越高。NI
: 进程的nice值,数值越小表示优先级越高。VIRT
: 进程使用的虚拟内存大小,包括代码、数据和共享库等。单位KBRES
: 进程使用的物理内存大小,不包括共享库等。单位KBSHR
: 进程使用的共享内存大小。单位KB或MB,取决于数值大小TIME+
: 进程使用的CPU时间,包括用户态和内核态的时间。
2) S 进程状态
R
: Runnable(运行): 正在运行或在运行队列中等待S
: sleeping(中断): 休眠中,受阻,在等待某个条件的形成或接收到信号D
: uninterruptible sleep(不可中断): 收到信号不唤醒和不可运行,进程必须等待直到有中断发生Z
: zombie(僵死): 进程已终止,但进程描述还在,直到父进程调用wait4()系统调用后释放T
: traced or stoppd(停止): 进程收到SIGSTOP,SIGSTP,SIGTOU信号后停止运行
后缀表示
<
: 优先级高的进程N
: 优先级低的进程L
: 有些页被锁进内存s
: 进程的领导者(在它之下有子进程)l
: ismulti-threaded (using CLONE_THREAD, like NPTL pthreads do)+
: 位于后台的进程组
3. sar 系统活动信息收集
3.1. 选项
1 | Usage: sar [ options ] [ <interval> [ <count> ] ] |
3.2. 网络流速统计
1 | 采集网卡上网络流速,5s输出一次,共输出1次 |
二、内核追踪调试技术
2. trace-cmd
2.1. 常用的用法
1 | 查看可以追踪什么点 |