美文网首页系统架构
SpringBoot 模拟将CPU打满100%

SpringBoot 模拟将CPU打满100%

作者: Sunny旋律 | 来源:发表于2022-05-17 23:07 被阅读0次

    一、环境说明

    闲暇之余,做个小测试,笔记以加深印象,仅学习使用

    操作系统:CentOS 7.9


    操作系统.png

    CPU:2个CPU,每个CPU 5核,共10核


    image.png

    二、代码说明

    起一个线程,死循环不中断,那这个线程会占用这个一个CPU核心,并将其打满100%。由此,我们要将整个操作系统的CPU吃满就很简单了,起10个线程即可。

    1、新建一个线程池

    image.png

    2、写一个Controller,没一次请求,起一个线程

    image.png

    三、开始测试看效果

    1、启动SpringBoot服务,空闲状态下,可以看到基本上CPU很空闲

    image.png

    2、先来一个请求,尝试让一个CPU核忙起来

    image.png image.png

    可以看到,该java进程已经CPU100%了。并且看上面圈起来的地方,占用了整个服务器10%的CPU算力。

    3、再来一个请求,尝试让两个CPU核忙起来

    image.png
    image.png

    基本上符合预期,java进程占用了200%的CPU,且占用了整个服务器20%的CPU算力。

    4、现在让我们把整个服务器的CPU打满

    经过前两步的尝试,基本可以确认,一个死循环无限计算,基本上就会一直占用一个CPU核数。我们的服务器有10个核,所以,我们需要起10个线程,就让会服务器的CPU忙起来。


    image.png image.png

    Java进程占用了1000%的CPU,10个核,整个服务器的CPU也基本上打满100%了。

    四、分析

    1、top - H -p 查看

    image.png
    先用top命令查看占用了1000%进程的Java进程PID为80761。然后用top -H -p 80761命令可以看到这个Java进程下的线程情况,前10个WebCommonOperateSerivice线程,每一个都占用了100%的CPU。其中WebCommonOperateSerivice是我们在定义线程池的时候给这个线程命的名字,所以这里看起来就很方便。由此可见,在实际编码中,给每一个线程池命一个有意义的名字,将会很方便后期分析问题。

    2、jstack 查看

    由于截图篇幅,只能截几个线程,不过也可以看出来,每个线程都是处于RUNNABLE状态,并且从堆栈信息也能看出是TestController里的一个线程。

    image.png

    以上!
    感谢阅读!

    相关文章

      网友评论

        本文标题:SpringBoot 模拟将CPU打满100%

        本文链接:https://www.haomeiwen.com/subject/ptqourtx.html