[Ubuntu] Linux如何定位java进程占用系统资源使用率高的问题→CPU和内存使用率

一、Linux如何定位java进程占用系统资源使用率高的问题(简单实现)

  1. linux文件夹下先创建一个TheradDemo.java 文件,明显会在10行死循环,此时会大量占用cpu的资源。下面通过linux命令来定位这个问题
import java.util.Scanner;

public class ThreadDemo1{
  public static void main(String[] args) throws Exception{
      System.out.println(" Thread start...");  
	  Thread t = new Thread(new Runnable(){
	  
		@Override
		public void run(){
			for(;;){   //10行-死循环处!!!!!!!
			}
		}
  });
  t.start();
  t.join();
  System.out.println("Thread end ...");
  }}

在这里插入图片描述

  1. 编译并执行以上java文件,
    在这里插入图片描述
  2. jps/ ps 查看当前进程的PID为4641
    在这里插入图片描述
  3. top -p 4641 查看当前进程的资源使用情况
    在这里插入图片描述
  4. top -Hp 4641 查看当前进程里的所有线程使用情况(看到有一个占用CPU最高的线程 4650)
    在这里插入图片描述
    在这里插入图片描述
  5. jstack 4641 输出当前进程中所有线程的调用栈信息

(查看和占用CPU最高的线程号4650相等的nid(16进制 0X122A),找到top命令输出的那个资源占用率高的线程调用栈信息)
在这里插入图片描述

  1. 找到调用栈信息最上面的代码提示(代码文件和行号)。在java代码上具体分析问题
  java.lang.Thread.State: RUNNABLE
	at ThreadDemo1$1.run(ThreadDemo1.java:10)
	at java.lang.Thread.run(Thread.java:745)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值