相关指令快速索引
希望查看的信息 | 指令 | 示例 | |
---|---|---|---|
系统进程列表 | ps -ef | grep 进程名 | ps -ef | grep java | |
系统资源占用较高的进程与它们占用资源的概览 | top | 常用 | |
进程运行、内存、cpu情况的实时统计 | vmstat 采样间隔 采样次数 | vmstat 1 5 | |
上电时间 & CPU 负载系数 | uptime | 就是 top 的第一行 | |
CPU 各个核的资源占用统计 | mpstat -P ALL 采样间隔 | mpstat -P ALL 1 | 信息类似 vmstat 的 CPU 部分 |
进程状态实时统计 | pidstat 监控项 -p 进程号 采样间隔 采样次数 | pidstat -u -r -p 1114 1 5 | 常用监控项 -u cpu -r 内存 -d IO -w 上下文切换 -t 线程 |
线程状态实时统计 | pidstat -t -p 进程号 采样间隔 采样次数 | pidstat -u -t -p 1114 1 5 | |
线程状态统计 | ps -mp 进程号 -o THREAD,tid,time | ps -mp 1114 -o THREAD,tid,time | 可以指定输出格式 |
可用内存 | free -m | 推荐使用 -m,以 MB 为单位统计 | |
查看磁盘可用 | df | df -h | |
磁盘 IO 实时统计 | iostat -xdk 采样间隔 采样次数 | iostat -xdk 1 5 | |
网络 IO 实时统计 | ifstat -tT 采样间隔 采样次数 | ifstat -tT 1 | -t 增加时间列,-T 增加统计列 |
指令
ps -ef | grep 进程名
查看进程信息
ps -mp 进程号 -o THREAD,tid,time
查看某进程下各线程的信息
通常关注的信息
- PID
- 命令行参数
- %CPU + TID,常用于定位占用资源的线程
top
系统进程监控
需要关注的信息
- 系统的平均负载是否过大
- 每个进程的 %CPU %MEM 是否有过大
vmstat 采样间隔 采样次数
进程运行、内存、cpu情况的实时统计
vmstat = VirtualMeomoryStatistics
信息说明:
- procs 进程信息
- r 运行中 和 等待 CPU 的 进程数
通常认为达到并超过 CPU 核心数 2 倍时,系统压力过大 - b 阻塞(等待资源)中进程数
- r 运行中 和 等待 CPU 的 进程数
- memory 内存信息
- swpd 使用的虚拟内存大小
- free 可用内存大小
- buff 作为缓冲区使用的内存大小
- cache 作为缓存使用的内存大小
- swap 交换区信息
swap 只有在内存不够用的时候才会启用
启用后在内存和硬盘之间做交换,相当于虚拟内存
此时,下面两个参数才不是 0- si 交换区读速度( 磁盘 -> 内存 的速度),KB
- so 交换区写速度( 内存 -> 磁盘 的速度),KB
- io 读写信息
- bi 交换区每秒读块数
- bo 交换区每秒写块数
- system
下面两个参数大,说明系统内核消耗了较多的 CPU 时间,而没有处理 app 业务,这些时间算是浪费的- in 中断平均数,次/s,包括时钟中断
- cs 上下文切换平均数,次/s
- cpu
- us 用户进程执行的时间比例
通常认为长期 > 50,表示需要优化算法或加速 - sy 内核系统进程执行的时间比例
通常认为长期较高,表示大量 CPU 时间被系统内核浪费
通常认为长期 (us + sy) > 80,表示 CPU 资源不足 - id 空闲的时间比例
- wa IO 等待的时间比例
通常认为长期 > 30,表示 IO 等待严重
可能由大量磁盘随机访问,或磁盘带宽限制导致 - st 虚拟机所盗用的时间比例
- us 用户进程执行的时间比例
通常关注的信息
- procs -r 的数量是否过多
通常认为阈值是 (CPU 核心数 * 2) - memory -free 是否过少
还要结合 swap 区,
memory -free 很少,说明内存不富裕
memory -free 很少,同时 swap -si/so 不是 0 ,说明内存不够用 - cpu -us/sy/wa 是否过高
uptime
系统上电时间与 CPU 负载系数
通常关注的信息:CPU 负载系数
mpstat -P ALL 采样间隔
CPU 各个核的资源占用统计
mpstat = Multiprocessor Statistics
通常关注的信息:类似 vmstat
pidstat -u 1 -p 进程号
进程状态统计
通常关注的信息:
- 按不同的监控项,关注内容不同
- 关注 CPU(-u) 时,通常注意 CPU 使用率
- 关注 线程(-t) 时,通常注意 tid,一般是在排除性能问题时关注
free -m
内存使用统计
通常关注的信息
- 内存使用率
通常服务器内存使用率在 [20,70]
df -h
查看磁盘可用
通常关注的信息:各磁盘使用率
iostat -xdk 采样间隔 采样次数
磁盘 IO 实时统计
通常关注的信息:
- rkB/s、wkB/s 是否出现长期过大
如果是,则需要优化程序读写速度 - await 是否过高
await 与 svctm 的值接近时,说明 IO 几乎不用等待,磁盘性能良好
await 远高于 svctm 时,说明 IO 等待队列太长需要优化或更换更快磁盘 - util 是否过高
util 表示每秒 IO 所占时间的比例
过高表示磁盘带宽全被占用,需要优化或添加磁盘
ifstat -xdk 采样间隔 采样次数
网络 IO 实时统计
安装指令
wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz
tar -xvf ifstat-1/1/tar/gz
cd ifstat-1.1
./configure
make
make install
通常关注的信息:各个网卡 IO 是否过高
JVM 性能工具
排查思路
以 CPU 飙高为例
- 定位占用资源的进程
可以使用top
、ps -ef
、jps
定位进程 - 定位占用资源的线程
可以使用下面方式进行定位pidstat -t -p 进程号
ps -mp 进程号 -o THREAD,tid,time
可以自定义字段
- 定位问题代码
通过jstack 进程号 | grep 线程号(16进制表示) A 行数
定位