zoukankan      html  css  js  c++  java
  • cpu占用高如何排查

    记录一次线上服务器出现cpu占用过高,避免之后再次出现相关问题,这里记录一下

    用代码模拟cpu 占用过高进行排查

    新建一个web项目,这里以springboot为例子新建一个web项目

    package com.wanjun.jvm;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @RestController
    public class JvmApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(JvmApplication.class, args);
        }
        //这里写个死循环 模拟 cpu 占用
        @RequestMapping("/cpu")
         public String testCpu() { 
            System.out.println("request cpu");
            while (true) {
                
            }
         }
    }

    将项目部署到linux 服务器上

    启动项目

     

    访问
    curl localhost:8080/cpu
     
    排查
    查看占用cpu高的进程 
    top
    如下图:可看出PID为4060的java进程占用cpu最高,达到了99.5%
    查看子进程情况:
    top -p 4606 -H  

    将 子进程id 转换成16进制

    printf "%x " 4648

     

     查询具体出现问题的代码位置
     jstack 4606|grep 1228 -C 30
     如下图:可看出是JvmApplication类的第19行出现问题

  • 相关阅读:
    迭代器、生成器
    函数(函数基础、装饰器、递归、匿名函数)
    文件处理
    python对象、引用
    字符编码
    流程控制if、while、for
    编程与编程语言
    Java源码阅读(五)—— AbstractQueuedSynchronizer
    Java并发编程(二) —— volatile
    Java源码阅读(七)—— ReentrantReadWriteLock
  • 原文地址:https://www.cnblogs.com/wanjun-top/p/12613752.html
Copyright © 2011-2022 走看看