昨天1024程序员节,我故意写了个死循环~

简介: 导致CPU100%的原因很多,而程序中出现死循环就是原因之一。然而,并不是每个人在工作中都有机会踩中这个坑。我就是其中一个没踩过的。

导致CPU100%的原因很多,而程序中出现死循环就是原因之一。然而,并不是每个人在工作中都有机会踩中这个坑。我就是其中一个没踩过的。人生似乎有些不完整。

所以,我做了一个很重要的决定:在程序中写一个死循环。看看会发生什么事情。

当然,不是在生产环境。 我搭建了一个实验环境来做实验。只是这个实验环境不仅可以用于这个死循环实验。以下是这个环境的结构图:

还是老样子,使用Vagrant + Virtualbox + Ansible自动化搭环境。

我们会写一个简单的Spring MVC 应用,然后其中一个接口里会有死循环代码:

以下是我自己尝试找出这个死循环的过程。

一、使用top,查看是哪个进程的问题

我请求一次:

http://192.168.88.10:9898/web/loop

然后,我打开新窗口,又请求一次

这里,我好奇CPU没有到200%。一直在120%和130%之间。P.S. 我一定是某个知识点不牢固,要不,不会有这个疑问。

二、堆空间

因为不涉及JVM堆空间问题,执行 jstat -gcutil 32593 1s 没看出什么问题。32593为Java进程ID,1s指1秒抽样一次。

三、栈

堆没问题,就看看是哪个线程占用得高。

列出java进程的线程,top -H -p <java 进程pid>

将jvm的栈dump下来 jstack -l <其中一个线程PID> >> stack.log,这里我选3596。

在日志中,找到相应的线程,我们需要从栈日志中找到相应的线程,但由于栈日志中使用的16进制,但是top中的PID又是10进制。所以,需要手工将10进制的PID转成16进制。3596的16进制转是0xe0c

四、小结

从这个解决的方式过程中,我们已经可以看出来一种基本的处理CPU 100%的情况了!希望对大家有所帮助!

欢迎工作一到五年的Java工程师朋友们加入Java填坑之路:860113481

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

相关文章
程序员真的有必要把GC算法好好过一遍,因为它是进大厂必备的
最早的GC算法可以追溯到20世纪60年代,但到目前为止,GC的基本算法没有太多的创新,可以分为复制算法(Copying GC)、标记清除(MarkSweep GC)和标记压缩(Mark-Compact GC)。近些年推出的GC算法也都是在基础算法上针对一些场景进行优化,所以非常有必要理解基础的GC算法。
|
Cloud Native 程序员 Go
程序员面试中的懒惰:如何避免成为失败的原因
程序员面试中的懒惰:如何避免成为失败的原因
38 0
|
监控 Java 关系型数据库
让我干一遍也就罢了,居然还一次次的要我给你,当我好欺负吗?
让我干一遍也就罢了,居然还一次次的要我给你,当我好欺负吗?
154 0
|
监控 Java 程序员
十分钟掌握java多线程进阶
十分钟掌握java多线程进阶
141 0
十分钟掌握java多线程进阶
|
Java 程序员
学妹问我Java异常是怎么回事,讲了半夜才明白,速度收藏!!!记得点赞和关注
异常是Java开发中常见的,也是程序最不愿意看到的,因为有异常基本上就代表我们写的代码有bug,很烦,游戏服务端有异常上报系统,每当半夜收到异常上报都慌的一笔。今天就扒一扒异常,开始走起。
151 0
学妹问我Java异常是怎么回事,讲了半夜才明白,速度收藏!!!记得点赞和关注
|
存储 缓存 安全
花了好几个晚上整理的JVM知识点,吐血献出(一)(上)
花了好几个晚上整理的JVM知识点,吐血献出(一)
127 0
花了好几个晚上整理的JVM知识点,吐血献出(一)(上)
|
监控 算法 Java
花了好几个晚上整理的JVM知识点,吐血献出(一)(下)
花了好几个晚上整理的JVM知识点,吐血献出(一)(下)
159 0
花了好几个晚上整理的JVM知识点,吐血献出(一)(下)
|
存储 缓存 Linux
面试官:如何写出让 CPU 跑得更快的代码?
CPU Cache 到底是什么样的,是如何工作的呢,又该写出让 CPU 执行更快的代码呢?
面试官:如何写出让 CPU 跑得更快的代码?
昨天去某大厂面试,居然让我做四则运算,还好我够机灵。
面试官:请您说说怎么计算四则运算?比如1 + 2 * ( 3 + 4 ) - 5。 我:先算括号里再算括号外,先乘除后加减,最后等于10。 面试官懵了一下,说:可能我说明白,我想问的是用计算机怎么计算? 我尬尴的笑了笑,马上说到:对于计算机来说,单纯的两个数的加减乘除很容易,但是如果乘除在加减的后面却要先运算,再加上几个括号,就变得更加复杂了。 为了使计算机更容易理解,前人已为我们引入了一种新的四则运算的表示法。
190 0
昨天去某大厂面试,居然让我做四则运算,还好我够机灵。
阿粉昨天说我动不动就内存泄漏,我好委屈...(下)
大家好,我是 ThreadLocal ,昨天阿粉说我动不动就内存泄漏,我蛮委屈的,我才没有冤枉他嘞,证据在这里: ThreadLocal 你怎么动不动就内存泄漏? 因为人家明明也考虑到了很多情况,做了很多事情,保证了如果没有 remove ,也有对 key 值为 null 时进行回收的处理操作 啥?你竟然不信?我 ThreadLocal 难道会骗你么
阿粉昨天说我动不动就内存泄漏,我好委屈...(下)