TOP、jstack、jmap

Linux CPU占用率

  • TOP
    • 平均负载
  • jstack
    • 命令
    • CPU高

TOP

实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。常用来查看系统整机性能。
TOP、jstack、jmap_第1张图片

  • 第一行:任务队列信息,同 uptime 命令的执行结果,分别表示系统时间:14:36:54;运行时长5:07min;登录用户数2;平均负载(load average)::每1、5、15分钟系统的平均负载值load average: 0.00, 0.01, 0.05。
  • 第二行:总进程数113,正在运行1,休眠112,停止0,僵尸进程0
  • 第三行:cpu状态信息,用户空间占用CPU的百分比,内核空间占用CPU的百分比,改变过优先级的进程占用CPU的百分比,空闲CPU百分比, IO等待占用CPU的百分比,硬中断占用CPU的百分比,软中断占用CPU的百分比。按1可查看CPU每个核芯的信息。
  • 第四行:内存状况,总内存、未使用、已使用、缓存,可用内存=free + buffer + cached
  • 第五行:swap交换分区信息,对于内存监控,如果used数值在不断变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

平均负载

  • 系统负载:系统CPU繁忙程度的度量,即有多少进程在等待被CPU调度(进程等待队列的长度)。
  • 平均负载:是一段时间内系统的平均负载,这个一段时间一般取1分钟、5分钟、15分钟。
    Load < 0.7时:系统很闲,要考虑多部署一些服务
    0.7 < Load < 1时:系统状态不错,CPU可以轻松应对
    Load == 1时:系统马上要处理不多来了,赶紧找一下原因
    Load > 5时:CPU已经非常繁忙了,进入CPU的进程都要无法很快的运行。
    三个Load值要先看哪一个?
    结合具体情况具体分析:
    1)1分钟Load>5,5分钟Load<1,15分钟Load<1:短期内繁忙,中长期空闲,初步判断是一个“抖动”,或者是“拥塞前兆”
    2)1分钟Load>5,5分钟Load>1,15分钟Load<1:短期内繁忙,中期内紧张,很可能是一个“拥塞的开始”
    3)1分钟Load>5,5分钟Load>5,15分钟Load>5:短中长期都繁忙,系统“正在拥塞”
    4)1分钟Load<1,5分钟Load>1,15分钟Load>5:短期内空闲,中长期繁忙,不用紧张,系统“拥塞正在好转”

jstack

主要是用来查看某个java进程内的线程堆栈信息

命令

jstack [-l] <pid>
    (to connect to running process) 连接活动线程
jstack -F [-m] [-l] <pid>
    (to connect to a hung process) 连接阻塞线程
jstack [-m] [-l] <executable> <core>
    (to connect to a core file) 连接dump的文件
jstack [-m] [-l] [server_id@]<remote server IP or hostname>
    (to connect to a remote debug server) 连接远程服务器

CPU高

public class Demo {
    private static final Lock lock = new ReentrantLock();
    private static final ExecutorService THREAD_POOL_EXECUTOR = Executors.newFixedThreadPool(2);
    public static void main(String[] args) {
        THREAD_POOL_EXECUTOR.execute(() -> {
            test();
        });
        THREAD_POOL_EXECUTOR.execute(() -> {
            test();
        });
    }
    public static void test() {
        lock.lock();
        int i = 0;
        while (true) {
            i++;
        }
    }
}
  • top:查看占用CPU较高的java进程。
    TOP、jstack、jmap_第2张图片
  • top -H -p pid:查看pid对应进程下占用CPU高的线程。
    TOP、jstack、jmap_第3张图片
  • printf “%x\n” pid:将十进制的线程pid转换为十六进制。
    在这里插入图片描述
  • jstack 5255 | grep 14ae -A 30
    pool-1-thread-1这个线程状态为RUNNABLE,一直在执行 Demo.test(Demo.java:32)的方法,这样就定位到了对应的代码。
    TOP、jstack、jmap_第4张图片
  • 线程状态
    1.RUNNABLE,线程处于执行中
    2.BLOCKED,线程被阻塞
    3.WAITING,线程正在等待

线程等待获取锁。
TOP、jstack、jmap_第5张图片

你可能感兴趣的:(java)