Java服务器-Disruptor使用注意

最近看了一下部署后台的服务器状况,发现我的一个Java程序其占用的CPU时长超过100%,排查后发现竟是Disruptor引起的,让我们来看看究竟为什么Disruptor会有这样的表现。

发现占用CPU时间超过100%的进程

首先是在服务器上用top命令查看服务器状态,发现有一个应用程序占用的CPU时长超过100%,如图:

我根据进程号查了一下,发现是我的一个Java游戏后台服务,有一个CPU几乎被占满,因此继续排查究竟是什么代码导致了这种情况。

top -Hp 27538将这个进程的所有线程显示出来,按照CPU占用时间排序,看到了这个结果:

 

27658线程占用了近乎所有的CPU时间,而且一直都是,因此查看这个进程的详细信息。

jstack pid > pid.log命令将该进程的进程快照输出到一个文件中,下载下来。

 将27658转换为16进制0x6c0a后在线程快照中查询(因为线程快照中线程ID都是16进制存放,所以需要转换)

"disruptor-0" #27 prio=5 os_prio=0 tid=0x00007fa100c58000 nid=0x6c0a runnable [0x00007fa0ae080000]java.lang.Thread.State: RUNNABLEat com.lmax.disruptor.BusySpinWaitStrategy.waitFor(BusySpinWaitStrategy.java:39)at com.lmax.disruptor.ProcessingSequenceBarrier.waitFor(ProcessingSequenceBarrier.java:56)at com.lmax.disruptor.BatchEventProcessor.processEvents(BatchEventProcessor.java:159)at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:125)at java.lang.Thread.run(Thread.java:748)

这是Disruptor的一个堆栈,为了更直观地查看线程的状态信息

分析Disruptor为何会占用整个CPU

根据上面快照的分析,实际是Disruptor的等待策略相关的线程所导致的,查看BusySpinWaitStrategy类,发现有相关说明

 * This strategy will use CPU resource to avoid syscalls which can introduce latency jitter.  It is best* used when threads can be bound to specific CPU cores.

现在终于知道了,原来是因为这个策略就是让线程绑定了一个CPU核心,自然其CPU占用时间就超过100%了

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

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

相关文章

C语言 寻找单身狗(2个

此题知识:a^0a;a^a0;传值调用和传址调用要分清作用 题目:在 1,2,3,4,5,6,1,3,4,5这几个数字中找出只出现一次的数字并打印在屏幕上 解题思路&…

vue,provide和inject,备忘

在Vue.js应用中,provide 和 inject 是一对API,用于实现组件间的跨层级依赖注入。provide 在父组件中定义要向下传递的属性或方法,而 inject 在子组件中声明它需要从祖先组件那里注入的属性。 具体到您的例子: // 在根组件或任意…

超越基础:提升你的数据采集策略与IP代理的高级应用

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

【AI辅助研发】-趋势:大势已来,行业变革

【AI辅助研发】-趋势:大势已来,行业变革 引言 在科技日新月异的今天,人工智能(AI)技术已逐渐渗透到各行各业,其中软件研发行业更是受益匪浅。AI辅助研发已成为大势所趋,不仅提高了软件开发的效…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:动态属性设置)

动态设置组件的属性,支持开发者在属性设置时使用if/else语法,且根据需要使用多态样式设置属性。 说明: 从API Version 11开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 attributeModifier attributeMo…

js之原型链

在JavaScript中,原型链是一种用于实现继承和属性查找的机制。每个对象都有一个内部属性[[Prototype]],这个属性指向创建该对象时使用的构造函数的“prototype"属性。对象的方法和属性定义在它的原型对象上。 1.原型(Prototypes&#xf…

RHCE——一、OpenEuler22.03安装部署及例行性任务

RHCE 一、OpenEuler22.03安装部署及例行性任务 一、网络服务1.准备工作2、RHEL9操作系统的安装部署3、配置并优化OpenEuler22.034、网络配置实验:修改网络配置 二、例行性工作1、 单一执行的例行性任务:at(一次性)at命令详解 2、循…

AI赋能下的研发新时代:2024年研发趋势展望

引言: 在技术的迅猛发展下,人工智能(AI)已经不再是科幻小说中的幻想,而是我们日常生活和工作中不可或缺的一部分。特别是在研发领域,AI的应用已经逐渐渗透到了各个环节,为科学家、工程师和研究…

[综述笔记]Graph Neural Networks in Network Neuroscience

论文网址:Graph Neural Networks in Network Neuroscience | IEEE Journals & Magazine | IEEE Xplore 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正&#xf…

linux进程间通信-消息队列

Linux下使用C语言实现进程间的通讯-消息队列 Linux进程间通信-消息队列(IPC、mq)C/C代码接口 Linux 进程间的通信(三)—消息队列

电脑打字突然变成繁体字如何修改

1. 右键电脑右下角的“中”字 2. 点击字符集,选中简体即可 有用的话记得给我点个赞啊~ 靴靴!

学习数据结构和算法的地13天

题目讲解 尾插 #include <stdio.h> #include <stdlib.h> // 定义顺序表结构 #define MAX_SIZE 100 struct ArrayList {int array[MAX_SIZE];int size; // 当前元素个数 }; // 初始化顺序表 void init(struct ArrayList *list) {list->size 0; // 初始时元素个…

【Leetcode每日一题】 位运算 - 位1的个数(难度⭐)(32)

1. 题目解析 题目链接&#xff1a;191. 位1的个数 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 核心在于计算题目所给32位二进制数1的个数返回即可。 2.算法原理 位运算特性&#xff1a;通过位运算&#xff0c;特别是按位与(&…

PLC的FC与FB模块程序的功能解析

前文讲了在西门子系列的PLC中四个程序模块的描述&#xff0c;从S7-1200PLC开始就有FC和FB程序块了&#xff0c;但在使用的时候&#xff0c;一些使用者还是不好理解&#xff0c;以至于不知道该如何选择。今天&#xff0c;我们就用大白话的方式给大家讲解FC与FB的功能。 1、FC与…

ElasticSearch 与java的结合使用(二)

不同类型商品数量 {"size": 0, "aggs": {"type_group": {"terms": {"field": "type.keyword"}}} }SearchRequest request new SearchRequest();request.indices("product");// 按照类型分组统计数量A…

zzu2024三月招新(A-F,I-L)

目录 1.A 2.B 3.C 4.D 5.E 6.F 7.I 8.J 9.K 10.L 先吐槽一波,比赛的dev超级难用,没有编辑错误提示,不能复制样例,太草了,开局还开错题了,第一个小时没出题,还好后面写了几个签到,最后出了7题. 1.A 这题n比较小,只有1e3,可以n方暴力过,稍大一点就很难了.具体来说就是…

代码随想录算法训练营第五十五天 583. 两个字符串的删除操作、 72. 编辑距离、 编辑距离总结篇

代码随想录算法训练营第五十五天 | 583. 两个字符串的删除操作、 72. 编辑距离、 编辑距离总结篇 583. 两个字符串的删除操作 题目链接&#xff1a;https://leetcode.cn/problems/delete-operation-for-two-strings/ class Solution {public int minDistance(String word1, …

计算机基础专升本笔记-汇总笔记(五)office最最最基础背诵一

计算机基础专升本笔记-汇总笔记&#xff08;五&#xff09;office最最最基础背诵一 一、Word文档视图 页面视图阅读版式视图Web版式视图大纲视图&#xff08;只能看见文字&#xff0c;不显示图片&#xff09;草稿视图&#xff08;显示标题正文&#xff0c;水平标尺&#xff0…

02-组件化编程与Vu额 Click脚手架

1.Vue组件化编程(只有1个数字是一级标题) 1.1 模块与组件、模块化与组件化(两个数字组成是二级标题) 1.1.1模块(三个数字是三级标题 依次类推) 理解&#xff1a;向外提供特定功能的 js 程序&#xff0c;一般就是一个 js 文件为什么&#xff1a;js 文件很多很复杂作用&#xf…

Python基础知识:运算符详解

前面我们讲完了Python的基础语法、基本的数据类型以及各种数据类型间的转换。现在可以进行Python的基础知识的逐步详解学习了。下面我们开始讲解Python基础知识&#xff1a;运算符。 在Python中&#xff0c;运算符是用于执行各种操作的符号&#xff0c;它们可以对数字、字符串…