亿级流量的秒杀系统压测性能分析
性能分析常用方法 系统出现问题分类: 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
