Linux | 性能问题排查

相关指令快速索引

希望查看的信息指令示例
系统进程列表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,timeps -mp 1114 -o THREAD,tid,time可以指定输出格式
可用内存free -m推荐使用 -m,以 MB 为单位统计
查看磁盘可用dfdf -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,常用于定位占用资源的线程

详见 Linux | 进程管理 & 服务管理

top 系统进程监控
在这里插入图片描述
需要关注的信息

  • 系统的平均负载是否过大
  • 每个进程的 %CPU %MEM 是否有过大

详见 Linux | 进程管理 & 服务管理

vmstat 采样间隔 采样次数 进程运行、内存、cpu情况的实时统计
在这里插入图片描述
vmstat = VirtualMeomoryStatistics
信息说明:

  • procs 进程信息
    • r 运行中等待 CPU 的 进程数
      通常认为达到并超过 CPU 核心数 2 倍时,系统压力过大
    • b 阻塞(等待资源)中进程数
  • 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 虚拟机所盗用的时间比例

通常关注的信息

  • 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 性能工具

参考 基础 | JVM - [指令 & 性能监控]

排查思路

以 CPU 飙高为例

  • 定位占用资源的进程
    可以使用 topps -efjps 定位进程
  • 定位占用资源的线程
    可以使用下面方式进行定位
    • pidstat -t -p 进程号
    • ps -mp 进程号 -o THREAD,tid,time 可以自定义字段
  • 定位问题代码
    通过 jstack 进程号 | grep 线程号(16进制表示) A 行数 定位
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值