找到了调用代码
com.p.commonservice.report.controller.TableController.exec
导致CPU很高 。
再利用 jmap 导出dump
jmap -dump:file=20221107.dump pid利用mat分析定位,果然是
com.p.commonservice.report.controller.TableController.exec方法中的问题 。
方法中使用了本地缓存,找来开发人员一起分析 。自行实现了一个本地缓存,类似于HashMap 。在调用接口的时候不做diff操作,直接put 。
举例:
缓存中保存User类 。1@Data2class User {34 private String name;56 private Integer age;7}
缓存内容可能为: 1{2 "jjs":{3 "age":27,4 "name":"jjs"5 }6}
缓存同步涉及两种操作:新增和覆盖 。
两种操作均直接使用put操作实现,无论当前缓存key是否已经存在 。
这样的操作方法在业务上完全没有问题 。
但对于GC而言,每次缓存同步需要new很多新的对象,并且这些对象都将一直存活,直到被覆盖,或者晋升到老年代 。
这些缓存对象首先会被分配到年轻代,在YGC时候,这些对象都会被标记为存活 。
【利用Arthas查找cpu 100%】
推荐阅读
- 如何查找 Windows11 的安装序列号
- 怎样利用燕麦片营养减肥? 燕麦快速减肥法
- 花露水的4个作用 花露水的作用
- 秋招|在领导眼里,这些人可利用但不可倚重
- 郭德纲|侯耀文为什么收郭德纲为徒?两位侯家至交评价,互相利用
- 如何利用PPT录制微课
- 如何抓住当前一切可以利用的机会?
- 怎样利用克莱姆法则解线性方程组
- 怎么样利用思维导图进行知识整理
- 利用excel中合并计算快速合并数据
