一、背景说明
1、生产环境中的问题?
- 生产环境发生了内存溢出该如何处理?
- 生产环境应该给服务器分配多少内存合适?
- 如何对垃圾回收器的性能进行调优?
- 生产环境CPU负载飙高该如何处理?
- 生产环境应该给应用分配多少线程合适?
- 不加log,如何确定请求是否执行了某一行代码?
- 不加log,如何实时查看某个方法的入参与返回值?
2、为什么要调优?
- 防止出现 OOM
- 解决 OOM
- 减少 Full GC 出现
3、不同阶段的考虑
- 上线前
- 项目运行阶段
- 线程出现 OOM
二、调优概述
1、监控的依据
- 运行日志
- 异常堆栈
- GC日志
- 线程快照
- 堆转储快照
2、调优的大方向
- 合理的编写代码
- 充分并合理的使用硬件资源
- 合理地进行 JVM 调优
三、性能优化的步骤
1、性能监控
- GC频繁
- cpu load 过高
- OOM
- 死锁
- 程序响应时间较长
2、性能分析
- 打印 GC 日志
- 通过 GC Viewer 或者 http://gceast.io 来分析日志信息
- 灵活运用命令行工具、jstack、jmap、jinfo
- dump出堆文件,使用内存分析工具分析文件
- 使用 Arthas、jconsole、JVisualVm 来实时查看 JVM状态
- jstack 查看堆栈信息
3、性能调优
- 适当增加内存,根据业务背景选择垃圾回收器
- 优化代码,控制内存使用
- 增加机器,分散节点压力
- 合理设置线程池线程数量
- 使用中间件提高程序效率、比如:缓存、消息队列
- 其他…
四、性能评价/测试指标
- 停顿时间(响应时间)
- 提交请求和返回该请求的响应之间使用的时间,-.般比较关注平均响应时间常用操作的响应时间列表:
- 吞吐量
- 对单位时间内完成的工作量(请求) 的量度
- 并发数
- 内存占用
- 相互间的关系
各位彭于晏,如有收获点个赞不过分吧…✌✌✌