Jstack查找线程运行问题

1 Jstack是JVM自带的可以查看线程运行情况的工具,线程死锁, 以及拿到线程dump来排查线程情况的工具。

 

当服务器上的cpu占用过大

1) top命令查看cpu占用过大的的进程

2) top -Hp pid ,查看这个pid下面所有线程占用cpu的情况

3)jstack -F  线程pid 拿到这个线程的堆栈情况,可以找到有个线程中有我们自己的包或类

4)分析这个线程状态信息,查看具体代码是否有问题 

 

测试代码:

   主类:

package com;

import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * Hello world!
 *
 */
public class App 
{
    static AtomicInteger count = new AtomicInteger(0);

    static ExecutorService executor1 = Executors.newFixedThreadPool(10) ;
//    Executor executor2 = Executors.newFixedThreadPool(10) ;



    public static void main( String[] args )
    {
        Object lockObj = new Object();
        TestThread1 testThread1 = new TestThread1(lockObj,"t_1");
        TestThread1 testThread2 = new TestThread1(lockObj,"t_2");
        executor1.execute(testThread1);
        executor1.execute(testThread2);

    }

}

 2 线程类:

  

package com;

/**
 * Created by admin on 2017/4/18.
 */
public class TestThread1  implements Runnable {

    Object lockObj ;
    String name;

    public TestThread1(Object lockObj,String name ) {
        this.lockObj = lockObj ;
        this.name = name;
    }

    @Override
    public void run() {
        caculate();
    }

    public void caculate(){
        while(true){
            synchronized (lockObj){
//            try {
//                Thread.sleep(500);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
                App.count.getAndAdd(1);
                System.out.println( App.count.get() + " "+ name);
            }

        }
    }
}

 3) jar放到linux上,运行jar包 java -cp test-1.0-SNAPSHOT.jar  com.App

4)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值