Java 开发,当cpu占用率100%,window和Linux分别如何定位问题

这篇具有很好参考价值的文章主要介绍了Java 开发,当cpu占用率100%,window和Linux分别如何定位问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux篇

导言
Java服务,有时候会遇到CPU 100%的问题,对于这样的问题,我们如何快速定位并解决呢?一般会有如下三个步骤:

找到最耗CPU的进程
找到这个进程中最耗CPU的线程
使用jdk自带工具jstack 查看堆栈信息,定位线程的什么操作消耗了大量CPU,定位对应代码

Java程序CPU占用过高(100%)解决思路和解决方案

一、找到最耗CPU的进程

通过top命令查看进程的cpu占用情况,运行top命令后再键入P(大写p)(或者是 shift + p ),进程会按照CPU使用率排序,我们查找到的最耗CPU的进程,应用程序为Java,CPU使用率达到了100%,则说明这是我们要找的对象;记录好该应用程序的进程id

二、找到这个进程中最耗CPU的线程

可以使用top命令:top -Hp ${进程的PID}

运行以上命令后再键入P(大写p),线程会按照CPU使用率排序
注意线程和进程的概念的区别

三、查看堆栈信息,定位线程的什么操作消耗了大量CPU,定位对应代码

堆栈里,线程id是用16进制表示的,所以需要将线程PID转化为16进制:

printf “%x” ${线程id}
之后Linux会输出转化后的结果

打印进程堆栈信息,通过线程id,过滤得到线程堆栈:

jstack ${进程的id} | grep ${线程16进制结果} -A 20

命令行执行后,可以查找到最耗CPU的代码为某个类的代码中的问题行数,由此问题得到定位,分析相应代码进行处理即可。

windows篇

补充工具

一、查找进程
查找问题进程比较简单,因为问题集中在CPU资源占用过高,那么我们查找进程时只需关注CPU。
打开JVisualVM,在Applications(中文版写的应用程序)面板中即可看到应用所在进程的PID8596和11556。windows java cpu,Java问题排查,linux,java,jvm,windows

需要注意的是该工具并不能定位到线程。
二、查找线程
根据进程查找线程,有两种方法。
1、使用window自带命令pslist

首先确认系统是否安装了pslist命令程序,如果命令不识别即没有安装,则上微软官方网址http://technet.microsoft.com/en-us/sysinternals/bb896682.aspx下载,下载完将其解压到C:\Windows\System32路径下即可使用。
windows java cpu,Java问题排查,linux,java,jvm,windows

2、利用微软提供的Process Explorer工具(推荐使用这个工具,可视化界面看起来很方便)
一般在windows下只能查看进程的CPU占用率,想要查看线程的CPU占用率可以通过该工具。下载地址是:http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

下载后运行起来,找到PID为8596的进程

右键点击Properties…选项,看到如下信息:
windows java cpu,Java问题排查,linux,java,jvm,windows

可以看到占用CPU最多的也是TID为20728的线程。
三、问题定位
问题定位需要以下步骤:
1、将线程TID转换为十六进制
因为线程dump信息中线程TID是十六进制的(堆dump也是这样),所以我们首先转换进制,这里通过系统自带的计算器进行转换。

记录下50F8这个数字。
2、在JVisualVM中的中线程dump中查找“50F8”
在JVisualVM中,应用程序右击,找到“线程Dump”

windows java cpu,Java问题排查,linux,java,jvm,windows
windows java cpu,Java问题排查,linux,java,jvm,windows

全选复制出来,通过Notepad++工具打开该文档,搜索“50F8”,可以看到问题定位到了具体的哪一行。(因为我程序是修改过的,所以CPU占用并没有太大问题,自然也就定位到正常的JVM处)

windows java cpu,Java问题排查,linux,java,jvm,windows

最后根据定位的位置去找问题就可以啦~~~·

直接使用jdk提供的工具jmc.exe

从window任务管理器可以看到
windows java cpu,Java问题排查,linux,java,jvm,windows
windows java cpu,Java问题排查,linux,java,jvm,windows

此时Java的cpu使用率飙高,(记住该pid进程号,后面会用到)打开jdk包安装目录
windows java cpu,Java问题排查,linux,java,jvm,windows

进入bin目录后找到jmc程序打开
windows java cpu,Java问题排查,linux,java,jvm,windows

可以看到所有java进程的列表程序

windows java cpu,Java问题排查,linux,java,jvm,windows对照进程号,点进去
windows java cpu,Java问题排查,linux,java,jvm,windows

之后等待右边窗口加载,因为cpu使用率已经过高,所以会有些卡顿,请耐心等待一下;
windows java cpu,Java问题排查,linux,java,jvm,windows
加载后可以看到左下角有各种选项卡,我们选择线程;
windows java cpu,Java问题排查,linux,java,jvm,windows
windows java cpu,Java问题排查,linux,java,jvm,windows

可以看到此时工具正在跟踪线程的堆栈,由于cpu概要分析没有勾上,所以此时cpu总体占用率显示未启用,我们将勾上后进行排序;
windows java cpu,Java问题排查,linux,java,jvm,windows

可以看到示例中有6个线程的cpu占用率过高,说明这几个线程的代码可能有问题,我们选择线程,查看详细信息,进行代码定位:windows java cpu,Java问题排查,linux,java,jvm,windows

可以看到,SecurityTestController.temstcpu100这个方法,定位代码82行,此时,问题得到定位,依次分析解决其他线程即可;文章来源地址https://www.toymoban.com/news/detail-760969.html

到了这里,关于Java 开发,当cpu占用率100%,window和Linux分别如何定位问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 七、训练模型,CPU经常100%,但是GPU使用率才5%左右

    现象: 大概原因 :GPU运算完毕后,花费了大量时间在写日志和存储pth文件,所以GPU使用率一直过低,CPU使用率一直很高。 具体原因分析参见【深度学习】踩坑日记:模型训练速度过慢,GPU利用率低 这里直接上解决办法: 减少日志IO操作频率 使用pin_memory和num_workers(num_wor

    2024年02月11日
    浏览(50)
  • 如何提升Linux服务器cpu利用率

        目录 一、安装cpulimit和相关依赖包 1. 安装cpulimit 2. 编写提升cpu利用率脚本,并执行         如何有效提升服务器器CPU利用率,可以通过自定义脚本结合cpulimit达到提升利用率和控制到目标值。 1. 安装cpulimit ##1. 安装cpulimit  yum install -y cpulimit ##2. 安装依赖包 yum -y inst

    2024年02月10日
    浏览(66)
  • 【Linux】Linux突然发现CPU占用100%该怎么办?如何排查进程(带你一文解决)

    目录 Linux的CPU发现占用率100%,一般会由什么情况引起? 1、进程负载过高: 2、错误配置的服务或应用程序: 3、恶意软件或病毒: 4、不良硬件或驱动程序: 5、系统内核问题: 6、CPU过热: 对于排查CPU占用率过高的原因,可以采取以下步骤和工具: 一、top/htop方法 1、使用

    2024年02月08日
    浏览(46)
  • 如何解决vscode频繁唤起git for Windows 导致电脑内存占用多大,cpu占用率飙升、风扇狂转问题

    亲爱的小伙伴,你是不是发现最近电脑风扇狂转,在打开任务管理器后发现 git for window 占用了大量的cup和内存。不要担心,一招教你解决这个问题。 如下图, 希望可以帮助到你哟!

    2024年02月12日
    浏览(66)
  • 【linux】查看CPU的使用率

    命令1:top 总体系统信息 uptime:系统的运行时间和平均负载。 tasks:当前运行的进程和线程数目。 CPU:总体 CPU 使用率和各个核心的使用情况。 内存(Memory):总体内存使用情况、可用内存和缓存。 查看 CPU 使用率 以下是一些常用的CPU使用率相关字段: %Cpu(s):显示整个系统

    2024年04月23日
    浏览(58)
  • 服务器卡顿、CPU飙升、接口负载剧增,如何定位到Java代码?

    🏆本文收录于,Java基础教程(进阶篇)。 目前已经800+订阅,CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。 解决这个问题的关键是要找到Java代码的位置。下面分享一下排查思路,以CentOS为例

    2024年02月11日
    浏览(44)
  • linux模拟cpu占用100%脚本

    linux模拟cpu占用100%脚本 vi killcpu.sh 脚本如下 运行方式: chmod 777 killcpu.sh 修改文件权限777 ./killcpu.sh 3 启动3个线程 top 查看cpu消耗 停止: killcpu.sh stop

    2024年02月01日
    浏览(56)
  • Linux 系统 CPU 100% 打满了!

    昨天下午突然收到运维邮件报警,显示数据平台服务器cpu利用率达到了98.94%,而且最近一段时间一直持续在70%以上,看起来像是硬件资源到瓶颈需要扩容了,但仔细思考就会发现咱们的业务系统并不是一个高并发或者CPU密集型的应用,这个利用率有点太夸张,硬件瓶颈应该不

    2024年02月08日
    浏览(31)
  • Visual Studio 2022写Windows程序造成CPU占用率过高故障排除

     我是荔园微风,作为一名在IT界整整25年的老兵,今天针对Visual Studio 2022写Windows程序造成CPU占用率过高故障进行排除。 下面是一个标准的Windows程序,也可以说是经典程序了,但是这个程序一运行,WinMain.exe的CPU占用率接近100%,为什么会这样??这个时候一定要冷静,要好好

    2024年02月10日
    浏览(34)
  • Linux提高CPU及内存使用率的脚本

    测试或运维中,有时会特意提高CPU及内存使用率,观察运行情况,以下脚本供参考。 链接1: Linux tmpfs及消耗内存脚本 链接2: Linux 中的 /dev/null 和 /dev/zero 链接3: Linux 提高CPU占用率的脚本

    2024年02月13日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包