java 应用 cpu 过高故障排查

文章目录

        • 一、前言
        • 二、测试代码 Test.java
        • 三、Linux 编译运行 Test.java 程序
        • 四、top 命令查看 cpu 使用情况
        • 五、查看进程下的线程详情 `top -H -p 11748`
        • 六、将`线程` 12240 的 pid 转为 16 进制 ` printf "0x%x\n" 12240`
        • 七、jstack 查看`进程`的快照
        • 遗留

一、前言

前两天写了一个订阅消息队列程序传递到 Flink,将订阅到的每个数据添加到 Queue 队列中,使用了 while(true) 从消息队列取数据,程序能正常运行,后来发现 CPU 使用率过高,通过排查发现时 while(true) 引起的,现在模拟 cpu 过高排查过程。

二、测试代码 Test.java

public class Test {
    public static void main(String[] args) {
        System.out.println("测试死循环对 CPU 影响");
        for (int i = 0; i < Integer.parseInt(args[0]); i++) {
            new Thread(()->{
                System.out.println(Thread.currentThread().getName());
                while (true){

                }
            },"线程:"+i).start();
        }
    }
}

三、Linux 编译运行 Test.java 程序

javac Test.java

运行 Test 程序,启动 1 个死循环线程

在这里插入图片描述

四、top 命令查看 cpu 使用情况

按大写 C 可以按 CPU 从大到小排序
在这里插入图片描述

可以看到 Test 的 CPU 使用率 100%,和 window 区别很大(window CPU 100% 就卡死了),我的 Linux 服务器是 2 核的,总 CPU 使用率 50 %,服务器也不会卡,简单理解就是把一个核跑满了

五、查看进程下的线程详情 top -H -p 11748

如下可以看到进程 12227 下线程 12240 的 CPU 占用最多 99.9%
在这里插入图片描述

六、将线程 12240 的 pid 转为 16 进制 printf "0x%x\n" 12240

这一步的目的是从进程快照中检索线程
在这里插入图片描述

七、jstack 查看进程的快照

使用 java jdk 下自带的 jstack 查看进程的快照 jstack 12227|grep -A 20 0x2fd0
可以看到第 7 行代码引起的,从源代码可以看到是 while(true) 引起的,简单说一下 grep 参数

  • grep -A n 显示匹配指定内容及之后的 n 行

  • grep -B n 显示匹配指定内容及之前的 n 行

  • grep -C n 显示匹配指定内容及其前后各 n 行

在这里插入图片描述
输出整个进程的快照到文件 jstack 12227 >> jstack.log
在这里插入图片描述

遗留

当我把线程数量设为 2,发现 2 核 CPU 直接 100%,但云服务器并没有卡死
在这里插入图片描述
在这里插入图片描述
对于 Linux ,当我把线程数量设为大于 2 的数时,CPU接近 200%,应该只是会影响执行效率,不会导致系统卡死(猜的,操作系统知识都忘完了,等后面了解了再记录),下main是线程数量为 5 的情况
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/43980.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

广告行业中那些趣事系列64:低成本训练一个媲美ChatGPT效果的Vicuna模型

导读&#xff1a;本文是“数据拾光者”专栏的第六十四篇文章&#xff0c;这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇主要从理论到实践介绍低成本训练一个媲美ChatGPT效果的Vicuna模型&#xff0c;对于希望搭建自己的大语言模型并应用到实际业务场景感兴趣的小…

研发机器配网方案(针对禁止外网电脑的组网方案)

背景&#xff1a;公司是研发型小公司&#xff0c;难免会使用A某D和K某l 等国内免费软件&#xff0c;这两个是业界律师函发得最多的软件。最简单的方案是离网使用&#xff0c;但是离网使用比较麻烦的是要进行文件传输&#xff0c;需要使用U盘拷贝&#xff0c;另外研发型企业一般…

有向图的强联通分量-SCC-Tarjan算法

有向图的强联通分量(SCC)Tarjan算法 强连通分量&#xff08;Strongly Connected Components&#xff0c;SCC&#xff09;的定义是&#xff1a;极大的强连通子图。 下图中&#xff0c;子图{1,2,3,4}为一个强连通分量&#xff0c;因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强…

c语言练手项目【编写天天酷跑游戏2.0】EASYX图形库的运用。代码开源,素材已打包

天天酷跑项目的开发 项目前言 项目是基于Windows&#xff0c;easyX图形库进行开发的&#xff0c; 开发环境&#xff1a;Visual Studio 2022 项目技术最低要求&#xff1a; 常量&#xff0c;变量&#xff0c;数组&#xff0c;循环&#xff0c;函数。 文章目录 天天酷跑项目的…

Hadoop概念学习(无spring集成)

Hadoop 分布式的文件存储系统 三个核心组件 但是现在已经发展到很多组件的s 或者这个图 官网地址: https://hadoop.apache.org 历史 hadoop历史可以看这个: https://zhuanlan.zhihu.com/p/54994736 优点 高可靠性&#xff1a; Hadoop 底层维护多个数据副本&#xff0c;所…

初识网络 --- 浅了解一些基础概念

文章目录 初识网络局域网与广域网 初识协议协议分层 OSI七层模型TCP/IP 四层&#xff08;五层&#xff09;模型网络传输基本流程协议报头局域网通信原理传输流程图数据包封装和分用 初识网络 在每台计算机独立的情况下&#xff1a;假设现在有三台计算机&#xff0c;每台计算机…

2024考研408-操作系统 第五章-输入输出IO管理 学习笔记

文章目录 一、I/O管理概述1.1、I/O设备的概念与分类1.1.1、什么是I/O设备&#xff1f;1.1.2、I/O设备的分类&#xff1a;按照使用特性1.1.2、I/O设备的分类&#xff1a;按传输速率分类1.1.3、I/O设备的分类&#xff1a;按照信息交换的单位分类知识点回顾与重要考点 1.2、I/O控制…

SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式

Redis 从入门到精通【应用篇】之SpringBoot Redis 配置哨兵模式 Lettuce 和Jedis 文章目录 Redis 从入门到精通【应用篇】之SpringBoot Redis 配置哨兵模式 Lettuce 和Jedis前言Lettuce和Jedis区别1. 连接方式2. 线程安全性 教程如下1. Lettuce 方式配置1.1. 添加 Redis 和 Let…

【目标跟踪】1、基础知识

文章目录 一、卡尔曼滤波二、匈牙利匹配 一、卡尔曼滤波 什么是卡尔曼滤波&#xff1f;——状态估计器 卡尔曼滤波用于在包含不确定信息的系统中做出预测&#xff0c;对系统下一步要做什么进行推测&#xff0c;且会结合推测值和观测值来得到修正后的最优值卡尔曼滤波就是利用…

git 和adb

一、git 1、git的作用 git是一个版本控制系统&#xff0c;是一种记录一个或若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。 我的理解就是代码管理器&#xff1a; 第一点你可将代码备份到git仓上&#xff1b; 第二点可记录的你修改记录&#xff1b; 第三点…

周训龙老兵参观广西森林安全紧急救援装备演练

7月21日上午&#xff0c;周训龙老兵参观广西紧急救援促进中心在南宁市青秀山举行森林安全紧急救援装备演练&#xff0c;多功能水罐消防车、无人救援机等先进设备轮番上阵&#xff0c;展示了广西应对突发事件的紧急救援速度和水平。广西壮族自治区应急厅不情愿参此次演练活动。 …

Python Flask构建微信小程序订餐系统 (十)

🔥 编辑会员信息 🔥 编辑会员信息可以通过点击会员列表操作,也可以点击会员信息详情点击进行操作 🔥 修改编程会员信息列表布局 🔥 修改 web/templates/member/index.html 文件,添加跳转到编辑会员信息的页面 web/templates/member/set.html 🔥 创建用于会员…

Mybatis单元测试,不使用spring

平时开发过程中需要对mybatis的Mapper类做单元测试&#xff0c;主要是验证语法是否正确&#xff0c;尤其是一些复杂的动态sql&#xff0c;一般项目都集成了spring或springboot&#xff0c;当项比较大时&#xff0c;每次单元测试启动相当慢&#xff0c;可能需要好几分钟&#xf…

OpenCV图像处理-图像分割-MeanShift

MeanShift 1. 基本概念2.代码示例 1. 基本概念 MeanShift严格说来并不是用来对图像进行分割的&#xff0c;而是在色彩层面的平滑滤波。它会中和色彩分布相近的颜色&#xff0c;平滑色彩细节&#xff0c;侵蚀掉面积较小的的颜色区域&#xff0c;它以图像上任意一点P为圆心&…

优思学院|六西格玛案例分析 - 降低焊接缺陷率

大家都知道六西格玛方法中的控制图有助于监测流程的稳定性和识别特有原因的发生。对流程周期性地采样&#xff0c;当测量结果在控制上限和下限内&#xff0c;而且围绕着一条中心线时&#xff0c;我们就说流程是受控的。注意上述控制上限和下限有别于规范限。 我们来看看一家工…

电脑安装双系统ubuntu18.04+windows后开机直接进入Windows解决方法

电脑型号&#xff1a;联想拯救者Y9000K2021H 系统&#xff1a;Windows11Ubuntu18.04双系统 问题&#xff1a;笔记本安装双系统后&#xff0c;Windows系统下处理word或者看论文&#xff1b;Ubuntu18.04系统安装ros进行机械臂控制等的研究。但最近开机后发现没有系统选项了&#…

知识库数据导出为excel-使用JavaScript实现在浏览器中导出Excel文件

我们智能客服知识库机器人已经开发完成&#xff0c;后端数据库是使用的qdrant向量数据库&#xff0c;但是该数据库并没有导出备份功能&#xff0c;所以我按简单的纯前端实现知识库导出excel数据 使用第三方库(如SheetJS) SheetJS是一个流行的JavaScript库&#xff0c;可帮助处理…

App隐私及合规评估服务

随着移动应用种类和数量呈爆发式增长&#xff0c;APP侵害用户权益事件层出不穷&#xff0c;为规范个人信息的收集使用&#xff0c;打击涉及个人信息违法犯罪行为&#xff0c;我国相继出台多个涉及个人信息保护相关法律法规。与此同时&#xff0c;中央网信办、工信部、公安部、市…

获取大疆无人机的飞控记录数据并绘制曲线

机型M350RTK&#xff0c;其飞行记录文件为加密的&#xff0c;我的完善代码如下 gitgithub.com:huashu996/DJFlightRecordParsing2TXT.git 一、下载安装官方的DJIFlightRecord git clone gitgithub.com:dji-sdk/FlightRecordParsingLib.git飞行记录文件在打开【我的电脑】&am…

Istio Pilot源码学习(二):ServiceController服务发现

本文基于Istio 1.18.0版本进行源码学习 4、服务发现&#xff1a;ServiceController ServiceController是服务发现的核心模块&#xff0c;主要功能是监听底层平台的服务注册中心&#xff0c;将平台服务模型转换成Istio服务模型并缓存&#xff1b;同时根据服务的变化&#xff0c…