性能调优分析思路
环境:基于centos7 为主的
使用的工具环境都是docker配的
四大指标:cpu io 内存 网络
如何测试性能呢?????????
今天的目的就是学的cpu和io牵扯就是linux命令
1.性能测试领域
2.学习分析思路 性能调优 CPU IO 能说出你的分析思路
具体点
1. Linux 性能测试
2. 分析树 CPU高-----?------?
环境-centos
依赖docker
3.场景设计??????
要有基本建模能力
单接口 基准 场景混合
怎么压?
发现问题如何初步定位??????
RT TPS threads
资源使用情况
四大指标:cpu io 内存 网络开销
预备知识:
要知道物理核和逻辑核
1.cpu 有几个核 单独执行几个任务 并发
4核 20进程 就会正常切换
4核 8逻辑核
怎么查,命令要急死
2. 进程 线程 协程 cpu是时间管理大师
虽然进程嵌套线程,cpu负责调度线程
协程 -田径里面跑步-里面还有赛道 ,赛道就是协成
协成的调度cpu管不了
状态的形式
状态:1.运行 2.等待 (资源不够用、cpu调度) 3.停止 4. 僵尸
查看cpu????????????
cat /proc/cpuinfo | grep 'model name' | wc -l
一个叫利用率 干活的时间/总时间 就用top命令 top后按1
一个叫平均负载 比如老板跟你定工资,我看你一小时已经做了多少任务,手头多少任务,多少在排队
看看cpu看看任务队列里面,等待 或正在 使用cpu的任务队列长度
wa IO开销
要指标-当你tps上到多少,rt不能过长 错误率 不能报错
再有资源使用的指标
1万 rt<500ms 错误率 <千4 资源使用指标:低于80%
平均负载指标:
小于核*1.5
2核心 3
CPU 使用率 平均负载
高 高 这种叫计算密集型
yum install jstack
定位问题???????????????????????
先top看最大进程号
top -Hp 14155 在看进程号下的线程
cd /usr/local/src/jdk1.8.0_221/bin
./jstack 14155 > /root/s.log 这个输入进程号,打出日志
printf "%x\n" 14182 这个是进程下的线程号,把进程号下面的线程号打印出来
cat o.log |grep '3766' 看日志定位到那行代码有问题
垃圾回收机制的问题,会打印出代码Gc
jstat -gcutil 【PID】 1000 100 查看每秒钟gc的情况
jstat 线程调用关系
jmap 查看线程的堆内存
进入usr/local/src/jdk1.8.0_221/bin
./jmap -heap 3075
另外一种
jmap -dump:format=b,file=18214.bin 18214
./jmap -dump:format=b,file=25473.bin 25473 进程号
打印出bin文件
在本地C:\Program Files\Java\jdk1.8.0_181\bin打开 lvm.exe
点击类查看,可以看到内存从高到底排,把最高的类型拿出来分析
dokcer
docker run --name nginx -p 10000:80 -itd feisky/nginx:sp
docker run --name phpfpm -itd --network container:nginx feisky/php-fpm:sp
docker
分为镜像,可以用镜像启动多个实例
先下一个镜像然后下多个容器
镜像 ---- 容器 ---- 启动 实例
docker image .....
docker ps -a
docker stop xxx(id) 停止容器
docker rm id 删除一个容器
短进程 短线程 这种场景????
大量的出生和死亡
docker exec -it 7311e50d1d89 /bin/bash
重启docker服务 systemctl restart docker
pstree | grep stress
cpu ---- 进程 线程 死循环+慢语句+计算复杂 FullGC大对象回收,分析堆的使用情况
如果发现GC也没发现需要看看代码那部分创建了短进程
某个命令 短进程
192.168.29.129:10000
主要是
第一种 cpu进程过高
第二种 慢代码 频繁垃圾回收
第三种 短进程