首页 科技正文

allbet电脑版下载:面试问题---JAVA程序CPU占用过高怎么定位

admin 科技 2020-06-04 41 0

今天一个电话面试问了这个问题。回来查了下谜底,自己也顺带操作一遍,做个纪录。之前只知道jstack工具可以查看线程状态这些。好比死锁这些,主要是之前不知道top -H -p pid这个下令的使用,这下令可以看到历程下面线程信息,拿到线程ID,然后再连系jstack下令使用就可以解决这个问题了。下面纪录一下详细的操作步骤:

1.打个jar包丢到机械上运行

package com.nijunyang.test;



public class TestApplication {

    public static void main(String[] args) {
        for (int i = 0; i < 50; i++) {
            new Thread(()->test()).start();
        }

    }

    public static void test() {
        while (true) {
            int a = 1  + 6;
            System.out.println(a);
        }
    }
}

使用这个maven插件 打包jar

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.nijunyang.test.TestApplication</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

2. java -jar test-0.0.1-SNAPSHOT-jar-with-dependencies.jar  运行程序

 

 一直在输出

3.top |grep java  或者 jps指令找到java历程的pid(6167)

 

 

4. top -H -p pid   以线程的形式查看该历程 top -H -p 6167

 

 由于我们程序是起了50个线程 以是这里就会展示这个历程中的所有线程呢

5.前面的线程ID是10进制的,,需要转换成16进制,,由于等下在jstack下令取出来的线程ID是16进制的:这里就随便选一个线程ID 去转换了,真实环境肯定是选择CPU占用率最高的谁人线程,echo "obase=16;6219" | bc

allbet电脑版下载:面试问题---JAVA程序CPU占用过高怎么定位 第1张

 

 

6.jstack 6167 >threadInfo.txt   信息输出到文件 然后查看。也可以直接在下令内里查看

 

7.文件中查找184b的线程ID信息,就可以找到是哪个线程导致的内存占用过高,同时也能看到详细的代码位置

allbet电脑版下载:面试问题---JAVA程序CPU占用过高怎么定位 第2张

 

,

欧博网址开户

www.mmsff.com欢迎进入欧博网址(Allbet Gaming),欧博网址开放会员注册、代理开户、电脑客户端下载、苹果安卓下载等业务。

版权声明

本文仅代表作者观点,
不代表本站Allbet的立场。
本文系作者授权发表,未经许可,不得转载。

评论