一、OOM问题
分析流程:
第一步:进程分析,分析老年代回收次数和消耗时间
第二步:日志分析,找出OOM发生时间的日志来锁定执行方法,对应的机器ip
第三步:找到对应的ip机器查看,进一步分析
第四步:下载的dump,使用mat分析堆内存,找到堆占用率前3,查看堆指向
问题产生:
查看新生代最高1000M,如果大数据量调用,jvm会把产生的大对象分配在新生代,新生代full gc后放到老年代,老年代gc后触发OOM,就会像类似死循环一样,一直full gc了
解决方案:
1、临时方法:
① 先进行扩容
② 任务先降下来
2、洗数据标签放到单独的服务
3、新生代放大
4、大数据量存储进行报警
二、Arthas分析高CPU问题:
优点:
1、快速定位和修复问题的一站式服务
使用方法:
1、dashboard + thread 命令,基本可以在几秒钟内一键定位问题,找出消耗 CPU 最多的线程和方法栈;
① dashboard 命令用于整体展示进程所有线程、内存、GC 等情况,分析占用CPU 较多的线程
② 使用thread -n查看最放慢的线程在执行的线程栈,找到执行的方法
2、直接 jad 反编译相关代码,来确认根因
3、如果调用入参不明确的话,可以使用 watch 观察方法入参,并根据方法执行时间来过滤慢请求的入参。
4、由于 monitor、trace、watch 等命令是通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此诊断结束要执行 shutdown 来还原类或方法字节码,然后退出 Arthas。