zoukankan      html  css  js  c++  java
  • 线上服务器CPU占用率高如何排查定位

    线上服务器CPU占用率高如何排查定位

     

    环境

    centos7 1核2GB

    Java8

    模拟cpu占用高

    新建一个名为jvm-learn的springboot项目

    模拟代码如下

    复制代码
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @SpringBootApplication
    public class JvmLearnApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(JvmLearnApplication.class, args);
        }
    
        @GetMapping("cpu")
        public void cpu() {
            while (true) {
    
            }
        }
    
    }
    复制代码

    打包

    在项目根目录下执行如下命令:

    mvn clean package -Dmaven.test.skip=true

    启动jar包

    nohup java -jar jvm-learn-0.0.1-SNAPSHOT.jar &

     

    访问

    curl localhost:8080/cpu

    排查

    查看占用cpu高的进程 

    top

    如下图:可看出PID为7149的java进程占用cpu最高,达到了98%

     查看进程中最耗cpu的子线程

    top -Hp 7149

    如下图:可看出PID为7166的线程占用cpu最高,达到了97.7%

    将最耗cpu的线程id转换为16进制输出

     printf "%x 
    " 7166

     

     查询具体出现问题的代码位置

    jstack 7149 | grep 1bfe -A 30

     如下图:可看出是JVMLearnApplication类的第18行出现问题

  • 相关阅读:
    计算几何
    HDU 4267
    HDU 4277
    NYOJ 123(插线问点)
    Set
    HDU 1792
    从文本文件读取数据到用vector实现的二维数组中
    为什么计算机采用二进制而不是八进制或者十六进制
    Google C++编程风格指南1
    编程中的命名设计
  • 原文地址:https://www.cnblogs.com/cuiqq/p/12368149.html
Copyright © 2011-2022 走看看