简述:

Spring Cloud项目其中某个服务运行几个小时后CPU无端端达到100%,但内存无异常。

环境:

1.硬件:AMD-R52500U处理器,Win10电脑

2.应用:共6个微服务,同时在一台电脑上启动,其中一个微服务出现cpu异常

3.服务:该服务包含redis、rabbitmq、七牛云

思路:

1.任务管理器:查看电脑整体情况,特别是CPU、内存使用情况。获取异常进程PID

2.Process Explorer:根据PID查询TID,TID即线程ID

3.jstack:利用jdk提供的堆栈分析工具查看异常线程详情

4.判断异常线程是否包含业务代码,如果包含,即编写的程序出现问题,修改即可(可以跳过以下步骤!)

 5.SkyWalking:监控微服务情况,判断CPU的异常是否和GC垃圾回收有关联

 6.jvisualvm+visual:jvisualvm是jdk自带的监控jvm工具,且装上visual gc插件,可以更加清楚新生代/老年代的情况

7.修改相关JVM参数,让服务正常使用CPU

1、任务管理器

步骤:

(1)查看占用CPU最高的进程

(2)详细信息里面调出进程PID

2、 Process Explorer

步骤:

(1)找到进程PID,右键properity->Threads,调出相关异常进程TID

(2)将TID转换为16进制,为接下来的jstack分析做准备,不懂的可以直接百度用转换器转换

3、jstack工具

步骤:

(1)jstack位于jdk的bin目录下,直接打开cmd或者直接用控制台打印

jstack 进程PID  > 输出的文件路径

(2)找到tid,tid即对应线程的16进制位,找到之后就做业务分析,若无相关业务逻辑,就可以排除业务逻辑错误的可能了,进入下一步

4、Skywalking

简述:

Skywalking是一款无侵入式的监控工具,只需在微服务启动时加入代理的参数,即可对微服务进行监控

步骤:

(1)官网下载:传送门

(2)应用服务启动:

-javaagent:D:\apache-skywalking-apm-bin\agent\skywalking-agent.jar -Dskywalking.agent.service_name=***-server

(3)Web监控地址:localhost:8080,分析异常进程

注:

在这里可以很清楚看到,服务young gc进行工作时,cpu的使用率几乎达到了100%,并且gc执行完毕了之后cpu还不释放,个人盲猜是-Xms设置太小了,即初始化的堆内存太小了,在gc收集完毕之后,内存还要进行动态伸缩,随后再次进行回收,如此循环往复,导致了cpu达到了100%,初步的解决方法就是将-Xms设置为与-Xmx相等,避免自动扩容所带来的的性能消耗

(最终这个方案经过实操验证还是无法解决问题)

5、jvisualvm

简述:

jvisualvm属于jdk的监控jvm工具,装上visual gc插件可以更加清楚了解到新生代/老年代的运行情况,进而作出更加准确的判断

6、解决方案:

操作:

将mq、redis、七牛云拆分为三个服务,但还是会出现问题,每个服务都会占用20%左右的cpu,而且JVM的Eden区以每秒20m的增速在增长,几乎每秒都会进行一次gc操作。由此可以看出redis、mq都比较耗cpu。

总结:

当CPU达到100%,一般可以分为两种情况,一种是程序bug,一种是硬件没有那么强大,可以给JVM参数适当作出一些调整,争取达到一个最佳的状态。如果仍然无法解决问题的话,建议换电脑!

-------------------如有错误的地方,希望各位老司机可以指正!

记-微服务CPU100%排查之windows版相关推荐

  1. 老衣的微服务实践简要指引2017版

    这是老衣在2017年5月份总结的,适用于中小团队跨平台微服务开发的实践指引(简化版).若有有不当之处,欢迎指点更正 因本文涉及到大量第三方库或工具,详细学习和了解需要参考相关官方文档.若您在使用Mac ...

  2. java ee的小程序_用微服务和容器替换旧版Java EE应用程序服务器

    java ee的小程序 Lightbend最近对2000多个JVM开发人员进行了一项调查,结果刚刚发布. 开展该调查的目的是发现:发展趋势与IT基础架构趋势之间的相关性,处于数字化转型前沿的组织如何使 ...

  3. 用微服务和容器替换旧版Java EE应用程序服务器

    Lightbend最近对2000多个JVM开发人员进行了调查,结果刚刚发布. 开展该调查的目的是发现:发展趋势与IT基础设施趋势之间的相关性,处于数字化转型前沿的组织如何使他们的应用程序现代化以及当今 ...

  4. 记微服务架构实战学习笔记

    架构演进和分布式系统基础知识 1.传统架构演进到分布式架构 简介:讲解单机应用和分布式应用架构演进基础知识 (画图) 高可用 LVS+keepalive 1.单体应用:开发速度慢启动时间长依赖庞大等等 ...

  5. mess-cli : 一个前端微服务架构脚手架(beta版)

    阅读本文需要较长的时间,本文介绍了微服务的概念.笔者心中的前端微服务,以及基于mess-cli脚手架,如何快速生成一个前端微服务架构项目 什么是微服务? 相信了解过spring cloud的同学都知道 ...

  6. 写markdown博客如何将截图快速上传到图床——记一个工具插件的实现(windows版 开源)...

    打造一个上传图片到图床利器的插件(Mac版 开源)(2018-06-24 19:44) 更新于2018年2月 做了以下改动: 1.修复了一个bug,把服务器区域做成可配: 七牛有华北,华东,华南以及美 ...

  7. Java微服务之Spring Boot on Docker,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  8. 微服务项目实战-易买网网页(电商)二、MybatisPlus与微服务注册

    目录 一.SpringBoot整合MybatisPlus 创建自动生成代码子模块 1.基于maven方式创建子模块zmall-generator,用于结合mybatis-plus生成代码. 创建商品服 ...

  9. 【微服务】重新理解微服务之终究绕不过这4个坎?

    大家曾经有没有遇过日常技术交流的时候,会讨论某某技术之间的关系是什么,某些技术是否应该用到微服务.我相信热爱技术交流的您,就算不是在微服务这里领域,或多或少都会跟其他同行会做一些争议话题的探讨,而且我 ...

最新文章

  1. 流式大数据处理的三种框架:Storm,Spark和Samza
  2. arrays must all be same length
  3. pytorch IntermediateLayerGetter
  4. php 公交 查询系统,php定做单城市公交路线查询系统
  5. 干货 | 五大实例详解,携程 Redis 跨机房双向同步实践
  6. Algorithm:【Algorithm算法进阶之路】之数据结构二十多种算法演示
  7. 窗口分析函数_8_计算某列的中间值
  8. mysql 存guid类型_从C#在MySQL中存储GUID
  9. 【CentOS7】安装 mysql client 5.7
  10. POJ2828线段树 插队(单点更新)
  11. Perl 安装及模组安装方法【windows】
  12. 美国下注15亿美元重点搞芯片!电子复兴5年计划首批入围项目曝光
  13. 2018国内优秀开源镜像站汇总
  14. 关于kinfu的配置问题,pcl_kinfu_largeScale
  15. xp计算机如何查看内存大小,windowsxp系统下如何查看电脑内存条最大频率
  16. 平衡二叉树、B树、B+树,B*树的区别与联系
  17. 深度:蚂蚁金融科技全面开放战略背后的技术布局
  18. 连接主机名失败但可以连接主机ip,能用ip地址连接却无法用主机名连接,看过来一站解决
  19. 【收藏夹2020-2021】
  20. uniapp适配pc_uni-app支持PC版!

热门文章

  1. 程序卡住了?教你如何调试已在运行的程序
  2. python写cdr插件_(如何(用Python)写一个(Lisp)解释器(下))
  3. 【Unity学习笔记】[Unity中文课堂教程] C#中级编程代码
  4. mysql命令行参数
  5. js jquery新窗口打开的几种方式
  6. 一行代码实现shell if else逻辑
  7. spring data jpa 执行sql
  8. 25万英汉词典汉英词典ACCESS\SQLite3数据库
  9. 学习OpenCV 函数方法结构总结
  10. 投稿前如何查询期刊的审稿周期