java 应用 cpu 过高故障排查

news2024/11/26 12:21:11

文章目录

        • 一、前言
        • 二、测试代码 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.coloradmin.cn/o/778455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二十六章:Pyramid Vision Transformer ——金字塔视觉Transformer:一种无卷积的用于密集预测的多功能主干网络

0.摘要 虽然卷积神经网络&#xff08;CNN&#xff09;在计算机视觉领域取得了巨大成功&#xff0c;但本研究探讨了一种更简单、无卷积的骨干网络&#xff0c;适用于许多密集预测任务。与最近提出的专门用于图像分类的Vision Transformer&#xff08;ViT&#xff09;不同&#x…

无人机自主探索FUEL:代码阅读1--边界簇检测更新与视点生成

~/src/catkin_fuel_refactored/fuel_refactored/fuel_planner/bagbag中包含三个.sh文件&#xff0c;为rosbag指令&#xff0c;给出了录包指令以及有用话题信息 FIS 1、增量边界检测与聚类 路径&#xff1a;~/fuel_planner/active_perception/src/frontier_finder.cpp 主要函…

五、模型训练

目录 1. 线性模型1.1 Lasso 回归1.2 Ridge 回归 2. 树模型2.1 随机森林&#xff08;Random Forest&#xff0c;RF&#xff09;2.2 梯度提升树&#xff08;GBDT&#xff09;2.3 XGBoost2.4 LightGBM2.5 CatBoost2.6 模型深入对比 3. 神经网络3.1 多层感知机3.2 卷积神经网络3.3 …

Linux 下 nc 发送接收 udp、tcp数据

nc&#xff0c;全名叫 netcat&#xff0c;它可以用来完成很多的网络功能&#xff0c;譬如端口扫描、建立TCP/UDP连接&#xff0c;数据传输、网络调试等等&#xff0c;因此&#xff0c;它也常被称为网络工具的 瑞士军刀 。 一、只服务端使用nc 备注&#xff1a;这种方式只能发…

【Hive】Centos7安装单机版Hive

Hive依赖MySQL存储元数据信息&#xff0c;安装Hive前需要先安装MySQL 一、安装MySQL 下载mysql安装包 wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm2. 如果不是root用户需要先切换到root用户&#xff0c;安装第1步下载的rpm包 yum -y install …

MYSQL练习一答案

练习1答案 构建数据库 数据库 数据表 answer开头表为对应题号答案形成的数据表 表结构 表数据 答案&#xff1a; 1、查询商品库存等于50的所有商品&#xff0c;显示商品编号&#xff0c;商 品名称&#xff0c;商品售价&#xff0c;商品库存。 SQL语句 select good_no,good…

数据结构07:查找[C++][B树Btree]

图源&#xff1a;文心一言 考研对于B树的要求重点在推理手算的部分&#xff0c;只参考王道论坛咸鱼老师的视频就可以了&#xff1b;若时间非常充裕的小伙伴&#xff0c;也可以往下滑了解一下代码~&#x1f95d;&#x1f95d; 备注&#xff1a; 这次的代码是从这里复制的&…

nodejs+vue+elementui汽车销售网站

前端技术&#xff1a;nodejsvueelementui,视图层其实质就是vue页面&#xff0c;通过编写vue页面从而展示在浏览器中&#xff0c;编写完成的vue页面要能够和控制器类进行交互&#xff0c;从而使得用户在点击网页进行操作时能够正常。 可以设置中间件来响应 HTTP 请求。 Express …

关于坏点问题的调试总结

1、问题背景&#xff1a; 前段时间调试一个项目&#xff0c;有发现在低照度场景下图上有很多明显的白点&#xff0c;如下图所示。以以往的调试经验来看这就是坏点&#xff0c;可以通过 ISP 中去坏点模块去将其抹掉&#xff0c;但这么多的明显坏点&#xff0c;通过去坏点模块去…

5.1.tensorRT基础(2)-正确导出onnx的介绍,使得onnx问题尽量少

目录 前言1. 正确导出ONNX总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 基础-正确导出 onnx 的介绍&#xff0…

【网络安全】DVWA靶场实战BurpSuite内网渗透

BurpSuite 内网渗透 一、 攻击模式介绍1.1 Sniper&#xff08;狙击手&#xff09;1.2 Battering ram&#xff08;攻城锤&#xff09;1.3 Pitchfork&#xff08;草叉&#xff09;1.4 Cluster bomb&#xff08;榴霰弹&#xff09; 二、 DVWA靶场搭建2.1 下载DVWA工程2.2 添加网站…

19 QListWidget控件

Tips: 对于列表式数据可以使用QStringList进行左移一块输入。 代码&#xff1a; //listWidget使用 // QListWidgetItem * item new QListWidgetItem("锄禾日当午"); // QListWidgetItem * item2 new QListWidgetItem("汗滴禾下土"); // ui->…

vue前端打包优化

建议&#xff0c;使用pnpn代替原生的npm 具体操作如下&#xff1a; pnpm安装&#xff0c;如果是linux&#xff0c;需要把npm和pnpm设置为环境变量## 安装pnpm npm install -g pnpm5.15.0 --registryhttps://registry.npm.taobao.org ## 设置淘宝镜像pnpm config set registry…

Vue3+vite实现组件上传npm并应用

场景&#xff1a;就是A项目的组件需要在B项目中使用 下面举例的是把a项目pagination分页组件上传到npm&#xff0c;在b项目使用 采坑日记&#xff1a;封装的组件一定要起name要不调用不成功 1.1 配置打包 1.1 首先在公用组件components文件夹下创建index.js文件&#xff0c…

JavaSwing+MySQL的小区物业管理系统

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88071096 JDK1.8、MySQL5.7 《数据库原理课程设计》课程设计任务书 题 目&#xff1a; 小区物业管理系统 学生姓名&#xff1a; xxxxxx 班 级&#xff1a; xx 级软件工程 x 班 学 号&#…

虚继承是如何解决二义性和数据的冗余的

我们知道面向对象的三大特性分别为封装,继承,多态。在继承中&#xff0c;我们知道一个类可以继承另一个类&#xff0c;这样的关系被叫做子类&#xff08;派生类&#xff09;继承父类&#xff08;基类&#xff09;&#xff0c;并且子类可以使用到父类的接口。但是在C中还被设计了…

ElasticSearch学习--数据聚合

介绍 数据聚合可以帮助我们对海量的数据进行统计分析&#xff0c;如果结合kibana&#xff0c;我们还能形成可视化的图形报表。自动补全可以根据用户输入的部分关键字去自动补全和提示。数据同步可以帮助我们解决es和mysql的数据一致性问题。集群可以帮助我们了解结构和不同节点…

Pytorch个人学习记录总结 08

目录 神经网络-搭建小实战和Sequential的使用 版本1——未用Sequential 版本2——用Sequential 神经网络-搭建小实战和Sequential的使用 torch.nn.Sequential的官方文档地址&#xff0c;模块将按照它们在构造函数中传递的顺序添加。代码实现的是下图&#xff1a; 版本1—…

BeanFactory容器的构建和使用示例

BeanFactory容器的实现流程&#xff1a; BeanFactory是Spring框架中的一部分&#xff0c;它提供了IoC&#xff08;控制反转&#xff09;的实现机制。下面是BeanFactory的IoC实现过程&#xff1a; 定义Bean定义&#xff1a;首先&#xff0c;我们需要在配置文件中定义Bean的定义…

[数据结构]顺序表和ArrayList

顺序表的介绍 在了解顺序表之前先了解一下什么叫做线性表&#xff1a; 线性表&#xff08;linear list&#xff09;&#xff1a;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构。 常见的线性表&#xff1a;顺序表、链表、栈、队列… 线性…