性能分析常用方法
系统出现问题分类:
1、 系统异常:
CPU 占用率过高, 磁盘满了, 磁盘 IO 频繁, 网络流量异常,通过指令进行排查: top, free,
dstat ,pstack,vmstat,strace 获取系统异常数据;
可视化工具: promethues ,
2、 业务异常
流量太多系统扛不住, 耗时长, 线程死锁, 多线程并发, 频繁 full gc, oom , 排查方式:
top,jstack,pstack,strace ,gc 日志, 业务日志(通过日志发现问题, 解决问题)
可视化工具: promethues
2.1TOP 指令监控 cpu 使用情况, 根据 cpu 使用情况分析系统整体运行情况
Load average : 参数一: 1 分钟内 cpu 平均使用率, 参数二: 5 分钟内 cpu 平均使用率, 参数
三: 15 分钟之内 cpu 平均使用率
单核心 CPU:
Load average < 1 ,表示 cpu 毫无压力, 比较空闲, 运行通畅
Load average = 1 , 表示 cpu 刚刚被占满, 没有可供提供的 cpu 资源了
Load average > 1 , 表示 cpu 满负荷运作, 线程处于阻塞状态, 等待 cpu 的资源
Load average > 5 , 表示 cpu 线程已经严重阻塞, 必须进行处理了;
4 核心 CPU:
Load average < 4 ,表示 cpu 毫无压力, 比较空闲, 运行通畅
Load average = 4 , 表示 cpu 刚刚被占满, 没有可供提供的 cpu 资源了
Load average > 4 , 表示 cpu 满负荷运作, 线程处于阻塞状态, 等待 cpu 的资源
Load average > 10 , 表示 cpu 线程已经严重阻塞, 必须进行处理了;
生产环境中: cpu 持续占用率, 长时间超过 70%, 其实就必须对服务进行处理了
2.2:Free 是排查线上内存问题的重要指令, 内存问题很多时候是引起 cpu 使用率较高的原因
2.3:df 指令查看磁盘使用情况, 有时候服务出现了问题, 有可能是磁盘不够
2.4: Dstat , 集成了 vmstat , iostat ,netstat 工具功能完成查询任务
业务问题: jmap ,jstack ,jinfo,jstat ,可视化工具排查
服务端调优
Tomcat 服务器调优(内置服务器)
Tomcat 默认使用的线程数:200
Tomcat 默认连接数:8192
Tomcat 等等队列
tomcat 默认等等队列 100, 最大线程 200, 相当于做了限流, 最多只能进入这么多线程; 超过这个线程数, 就会被抛弃;
Tomcat 服务调优
tomcat:
max-threads: 800 # 最大线程数
accept-count: 1000 # 等待对象, 最多允许 1000 个线程在队列中等待
max-connections: 20000 # 最大允许有 20000 个链接被建立
min-spare-threads: 100 # 最大空闲数, 防止流量洪峰
uri-encoding: utf-8
利用linux命令查看服务器一个进程有多少个线程在执行:
pstree -p 进程号| wc -l