1024这天,我故意写了个死循环~

Wesley13
• 阅读 533

点击蓝色“java版web项目”关注我哟

加个“星标”,优质文章,第一时间送达

1024这天,我故意写了个死循环~

上一篇:这300G的Java资料是我师傅当年给我的,免费分享给大家

下一篇:这200G的Java实战资料是我师傅当年教我的第二招

作者:翟志军

来源:http://suo.im/5emOBo

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

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

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

1024这天,我故意写了个死循环~

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

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

1024这天,我故意写了个死循环~

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

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

我请求一次:

http://192.168.88.10:9898/web/loop

1024这天,我故意写了个死循环~

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

1024这天,我故意写了个死循环~

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

二、堆空间

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

1024这天,我故意写了个死循环~

三、栈

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

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

1024这天,我故意写了个死循环~

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

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

1024这天,我故意写了个死循环~

四、小结

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

            说句题外话,想和老赵聊聊面试相关的经验、技术可以加我微信,但是坑位有限哦
  
           
           
           
 
          
          
          

         
         
         
 
          
          
          
  
           
           
           
   
            
            
            
    
             
             
             
               猜你喜欢 
             
  
           
           
           
  
           
           
           
   
            
            
            1、高效率!让java8的Stream对集合操作飞起来
   
            
            
            2、工作发狂:Mybatis 中$和#千万不要乱用!
   
            
            
            3、不是我吹,Lambda 这个坑你真的不知道
   
            
            
            4、小王,当Redis内存被打满了,会发生什么?
   
            
            
            5、SpringBoot这样优化,让你的项目飞起来!
   
            
            
            6、细说 Java 主流日志工具库
   
            
            
            7、后端开发都应该掌握的Redis基础
   
            
            
            8、我为什么不再推荐 RxJava
  
           
           
           
 
          
          
          

         
         
         强烈推荐一位大佬的公众号

好文章,我在看❤️

本文分享自微信公众号 - java版web项目(java_project)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Stella981 Stella981
3年前
200的大额人民币即将面世?央行:Yes!
点击上方蓝字关注我们!(https://oscimg.oschina.net/oscnet/2a1c2ac00bf54458a78c48a6c2e547d5.png)点击上方“印象python”,选择“星标”公众号重磅干货,第一时间送达!!(
Stella981 Stella981
3年前
Linux 是如何管理内存的?
点击蓝色“Java建设者”关注我哟加个“星标”,及时阅读最新技术文章!(https://oscimg.oschina.net/oscnet/df3cbbbafd5ae35c3c30f1b0081db3e740f.png)这是Java建设者第106篇原创文章Linux内存管理模型非常直接明了,因为Lin
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这