Arthas解决CPU飙高和定位死锁问题,JProfiler解决OOM问题
文章目录
- Arthas定位CPU飙高
 - Arthas定位死锁
 - JProfiler定位OOM
 
Arthas下载地址:
 https://github.com/alibaba/arthas/releases/download/arthas-all-4.0.4/arthas-bin.zip
 下载之后进入找到arthas-boot.jar,然后执行以下命令
java -jar arthas-boot.jar
 
选择你需要监控的进程输入序号即可
 
 我监控控制层
package com.hwg.logger.demos.web;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Slf4j
/**
 * @author <a href="mailto:chenxilzx1@gmail.com">theonefx</a>
 */
@RestController
public class BasicController {
    public Object lock1 = new Object();
    public Object lock2 = new Object();
    
   
    @GetMapping("/loop")
    public void  loop1(){
        log.info("loop");
        while (true){
        }
    }
    @GetMapping("/loop2")
    public void  loop2(){
        log.info("loop2");
        while (true){
        }
    }
    @GetMapping("/loop3")
    public void  loop3(){
        log.info("loop3");
        while (true){
        }
    }
    @GetMapping("/deadlock")
    public void DL() {
        new Thread(()->{
            synchronized (lock1){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lock2){
                    log.info("lock1 over");
                }
            }
        }).start();
        new Thread(()->{
            synchronized (lock2){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lock1){
                    log.info("lock2 over");
                }
            }
        }).start();
    }
}
 
Arthas定位CPU飙高
使用Postman分别发送3个请求导致CPU反复处理死循环
 


Arthas定位死锁

 定位死锁
thread -b
 

JProfiler定位OOM
设置vm启动参数
-Xms100m -Xmx100m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./dump.hprof
 


 
 用破解版jprofiler打开hprof文件,发现是ArrayList发生oom
 
