原生系统命令排查的方法

分别分享下Linux和Windows系统下的排查方法

首先是Linux系统下

如果不借助工具,使用Linux和jdk自带命令的话,步骤是这样的:

  1. top命令查出占用最高的进程;
  2. 使用jps -l 或ps -ef|grep java|grep -v grep命令,查出是哪个java服务搞的事;
  3. 使用ps -mp 进程PID -o THREAD,tid,time命令,查询具体是进程中哪个线程搞的事,命令解释:m表示显示所有的线程,p表示pid进程使用的cpu时间,-o是用户自定义的显示格式;
  4. 将线程ID转换为16进制格式,注意是小写,比如,线程ID为10则转换为a,必要时可借助计算器进行转换;
  5. 使用jdk的命令jstack 进程PID | grep tid(第四步转换后的结果) -A60,命令解释:-A60为查看结果后的60行;
  6. 上一步骤会直接打印出线程的执行栈信息,可直接定位出具体的哪一行代码出的事,到此,就可以到我们的业务代码中去检查、解决了。

使用自带的命令,大概要经历以上几个步骤才能最终定位到原因,接下来介绍使用工具的排查方法。

Windows系统排查方法

前四步目的是找出占有最高的线程ID,接下来使用微软官方的增强任务管理器:Process Explorer,可到官网下载。

同样先找到占有最高进程,查看详情,找到占有最高的线程TID,接下来的步骤就一样了。

使用Jarboot开源工具定位排查

Jarboot本身是一个启动Java进程的工具,同时它还附带了一些调试命令。本文介绍下当Java的服务占用了过高的CPU资源时,该如何进行排查。

可通过Gitee和GitHub下载最新的安装包,使用Docker的请更新下Jarboot的Docker镜像。

GitHub: https://github.com/majianzheng/jarboot

Docker Hub: https://registry.hub.docker.com/r/mazheng0908/jarboot

首先使用Jarboot自带的示例程序模拟下CPU占用过高的情况,将算法执行次数设的较高,间隔设为0,这样执行过程会占用很高的CPU。

和上面的前两步一样,首先查出是哪个Java服务,接下来到Jarboot的界面上,选中对应的Java进程。

接下来只需要一条命令,thread -n 3,查看最忙的前3个线程,并打印堆栈,如下图:

相比于不借助工具的更加方便,仅需一条命令就可以定位出哪一行。

如果不是用的Jarboot,还可以使用淘宝的Arthas工具,命令的使用是一样的。

Jarboot的使用手册见:快速上手 · 语雀

Jarboot的Demo示例下载:

示例包含了Spring Cloud的典型服务(业务服务、API网关)、NacosSentinelSeata等。

由于是完整的可运行环境,文件较大放在了网盘中,下载后解压即可用,注意Windows环境下Seata的服务配置依照压缩包中的图片提示修改配置。

阿里云盘:阿里云盘分享

百度网盘: 百度网盘 请输入提取码

提取码: 8yh5

Java服务CPU高如何定位解决相关推荐

  1. win10服务器cpu占用过高,解决win10服务主机内存和cpu高占用的解决方法

    有些使用Win10系统的用户反馈说,电脑总是卡到不行,检查后发现原来是服务主机,本地服务占用了大量内存和cpu,导致电脑运行起来并不那么流畅.那么,遇到这种问题该怎么办呢?接下来,小编就向大家分享解决 ...

  2. java 主备切换_keepalived 实现 Java 服务的高可用(主备切换)

    前言 本文要说的是基于 keepalived 实现两台服务器之间的主备切换,从而实现 Java 服务的高可用.keepalived 的原理不多做介绍,自行搜索了解,keepalived 的安装部署请参 ...

  3. Java服务CPU飙到99%问题排查

    原文链接:http://www.jianshu.com/p/e96c74133be6 一大早刚来到公司工位上,电话响起来了,一看是运维老湿打过来到,紧张的接起电话,小心脏扑通扑通跳."小路啊 ...

  4. JAVA中的高并发,解决高并发的方案

    java高并发,如何解决,什么方式解决 一.什么是高并发 二.高并发的解决方法有两种 三.追加 一.什么是高并发 1.1 高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑 ...

  5. java并发 cpu高_java高并发核心要点|系列5|CPU内存伪共享

    上节提到的:伪共享,今天我们来说说. 那什么是伪共享呢? 这得从CPU的缓存结构说起.以下如图,CPU一般来说是有三级缓存,1 级,2级,3级,越上面的,越靠近CPU的,速度越快,成本也越高.也就是说 ...

  6. dotnet core CPU高问题定位 dotnet-dump

    原文出处:dotnet core 高CPU定位 dotnet-dump篇 - linFen - 博客园 在windows操作系统,我们可以用Windbg定位,那在linux微软也提供dotnet-du ...

  7. java服务端高并发问题_Java服务端两个常见的并发错误

    理想情况来讲,开发在开始编写代码之前就应该讲并发情况考虑进去,但是大多数实际情况确是,开发压根不会考虑高并发情况下的业务问题.主要原因还是因为业务极难遇到高并发的情况. 下面列举两个比较常见的后端编码 ...

  8. 导航定位向高精定位的演进与实践

    导读 地图软件现在已成为人们出行必备的重要辅助工具.为了实现准确的导航,首先必须准确确定人或车的当前位置.因此,定位技术就是实现导航功能的基石. 本文较系统的介绍了手机.车机导航定位中使用的关键技术, ...

  9. 【开发经验】java服务生产环境CPU使用过高解决思路

    文章目录 思路 1.定位java服务进程 2.定位线程id 3.定位代码块 java服务生产环境CPU突然升高,日志查询无果时,可以通过使用jvm的调试工具定位问题. 思路 定位java服务进程--& ...

最新文章

  1. 企业如何告别这 5 类不靠谱的员工?
  2. 坑!只要年轻博士,薪资按考核结果发放, 高校的博后制度,究竟有多少门道?...
  3. Spring整合Hessian
  4. mysql中文查询问题
  5. Lvs+keepalived   实现负载均衡、故障剔除(DR模式)
  6. Qt5.9绘制文字(drawText函数)用法
  7. ios关于相机访问权限设置
  8. SELINUX导致的SSH密匙无法创建和访问的问题
  9. 通过Android studio使用git创建本地分支提交远程仓库以及如何查看切换分支
  10. java 先进先出的map_「 深入浅出 」java集合Collection和Map
  11. 如果去掉数学前后的空格_数学家们是怎么玩趣味拼图游戏的?
  12. UI设计师遇到瓶颈如何自我提升?
  13. php 支付宝支付回调与查询订单
  14. Atitit.软件仪表盘(4)--db数据库子系统-监测
  15. html字体颜色代码表,字体颜色代码
  16. Lookup 组件用法全解
  17. iOS 什么是MVC
  18. HDOJ-2154-跳舞毯
  19. Encoder-decoder模型及Attention机制
  20. DPU网络开发SDK——DPDK(九)

热门文章

  1. 房地产行业2021年1月投资策略:寒冬已过,暖春可期-20210107.PDF
  2. Python 开发者的 10 大编程开发环境(IDE),第一款是我的最爱
  3. java爬虫案例——SpringBoot使用HttpClient、Jsoup爬取京东手机数据
  4. CSS样式——盒子模型
  5. 戴尔台式计算机3060的价钱,惠普的RTX3060Ti台式电脑来袭,售价为9299元
  6. java 科里化_关于柯里化(curry)
  7. 朝着先能干活的方向努力。。。奥利给!!!20
  8. MINA2.0 原理
  9. games101学习笔记_Materials and Appearances
  10. Spring Boot项目源码启动正常,打成jar包后启动报错找不到主类