JAVA CPU过载问题排查思路以及一键查询脚本

本文介绍了当Java应用程序出现CPU过载时的排查思路,包括通过代码分析、获取进程和线程ID、使用jstack命令查看线程状态。同时,分享了一个名为`show-busy-threads`的一键查询脚本,该脚本结合ps和jstack命令,帮助快速定位高CPU使用率的线程,提高问题排查效率。
摘要由CSDN通过智能技术生成

一、常规查询方法

当我们遇到JAVA内存泄漏或者CUP居高不下的时候,一般怎么排查问题呢?

首先我们看段代码,以下代码是当用户输入任意字符之后,开始启动三个线程,一个死循环,一个锁竞争,一个死锁。启动之后我们来看下CUP的一个变化。

1、CPU 100%代码片段

package com.netty;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 作者:XX
 * 创建日期:2021/8/16
 * 类说明:模拟CPU 占用 100%
 *
 */

public class TestCpuThread {
    public static void main(String[] args) throws IOException {
        //控制台输入控制
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        br.readLine();
        //死循环线程
        createBusyThread();
        br.readLine();
        Object o = new Object();
        createLockThread(o);
        //死锁
        createDeadLock();

    }

    public static void createBusyThread() {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true)
                    ;
            }
        }, "busyThreadName");
        t.start();
    }

    public static void createLockThread(final Object lock) {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized(lock) {
                    try {
                        lock.wait();
                    }catch(InterruptedException e) {
                        e.printStackT
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值