性能诊断案例分析

案例1:系统调用导致CPU利用率高

CPU利用高 ---vmstat 1
谁高      ---top
find / -name loop.sh
cat -n /home/jiangkuan/loop.sh
导致CPU高的原因可能会有很多中,需要具体情况具体分析。 

#!/bin/bash
while(true)
do
cd;
done



 

案例2:用户CPU使用率高的例子

#include <stdio.h>
#include <math.h>
int main (void)
{
	while(1){
	  sqrt(3.1415926);
	}
}

 编译运行上面的脚本:



 

案例3:TPS小,RT大,资源利用高

对接口:http://192.168.231.131:8089/jforum-2.1.9/forums/show/9.page进行压测

从压测结果看出响应时间比较长,TPS比较低


监控发现有一个java进程占用了大量的CPU,用top -Hp 2772继续监控:


jstack 2772 > 2772.txt

将2832,2838,2810,2831,2837转换为十六进制,在2772.txt查询是否有对应的日志信息


查看对应位置的代码:发现代码中在进行大量的开方运算,导致了性能问题


 

案例4:TPS小,RT大,资源利用低

对接口http://192.168.231.131:8089/jforum-2.1.9/posts/list/65350.page压测结果如下:


用vmstat总体监控没发现任何异常,然后去看下JVM和MySQL是否正常


监控发现YGC和FGC基本上没用到,可排除JVM内存的问题,再dump下线程看是否有问题
jstack 2449 > 2449.txt,有可能一次抓不到想要的信息,这时可以多dump几次
响应时间长说明有线程在等待,top -Hp 2449  看下那个线程的占用时间长(TIME+)

可看到2480占用的时间最长,2480转换为十六进制是9B0,在刚刚dump的2449.txt中搜索9B0,结果如下:

发现有线程在等待,但是没看出具体什么业务触发的等待,这时就在2449.txt中寻找状态为TIMED_WAITING自己熟悉的东西,

在dump的日志中找到了自己业务相关的信息,然后查看对应的代码,发现代码创建线程的时候等待了2S

案例总结:
依据数据经过的节点,逐个排查是排查出问题;
vmstat 1 -- 排除掉了OS的问题;
接下来要排查的是:JVM和Mysql是否有问题
JVM:①内存回收是否有问题  ②线程是不是有等待有阻塞的情况  ③jstat pid > pid  ④反编译找代码

案例5:IO导致的性能问题

5.1 用vmstat监控发现有大量的io在进行写操作


5.2 用iostat监控发现有等待队列中有大量的操作在等待


5.3 用iotop进行监控发现很多java线程在进行IO操作

5.4 用top监控找到java进程的进程号为3129

5.5 jstack 3129 > 3129.txt,dump 3129这个进程,查看日志,找到对应的代码位置,发现在进行大量的写操作



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值