屎山JAVA系统性能问题排查

2024-04-01  本文已影响0人  九天之鹤

结论

  1. 通过Arthas工具trace命令监控到耗时长的方法,特定方法分析性能并优化;
  2. 通过jstack分析blocked线程;

优化方向

  1. 优化复杂的不合理的SQL
    • 循环列表执行SQL -> 一次执行SQL查询列表所需内容,遍历结果处理业务逻辑;
    • 较稳定的数据表每次使用都查询 -> 使用jvm缓存,缓存更新按不同数据场景分两种
      1. 数据更新时刷新缓存
      2. 定时缓存失效,下次使用查库并加载到缓存
  2. blocked线程锁等待
    • 公共数据类,使用ConcurrentHashMap、ConcurrentHashSet等支持高并发的数据集合类型
    • 公共方法类,syncronized function 降低锁的范围,方法关键字syncronized降级为方法体内 syncronized(entity){};entity可以是一个不能并发的一个颗粒度对象,比如 产品修改并发时,syncronized(产品缓存实体),这样不同产品就允许并发执行,同一产品修改时会锁同一个产品缓存实体,避免并发修改导致的问题。

排查过程工具

Arthas

  1. 常用命令,具体命令作用见官方文档,这里只按常用调整下参数
  1. 快捷使用

jstack

  1. 基础工具使用,具体看blocked线程waiting的对象id waiting to lock <0x00000003c03e49a0>
  2. 再查看这个对象id的持有线程 locked <0x00000003c03e49a0>
  3. 分析锁的是什么,按锁的等级层次加业务逻辑分析,按上边说的常用优化方向处理。还搞不懂就请教大神吧

jstack工具:

上一篇 下一篇

猜你喜欢

热点阅读