`

一、消息系统mqtt服务器CPU100%

 
阅读更多
一、问题现象
    线网环境mqq服务器运行一段时间后,出现CPU 100%,进而导致虚拟化平台报告警,服务不可用。


二、背景介绍
   
1、环境信息:
  管理系统:redhed5.7 8C 16G 300G 2台
  接口子系统:redhed5.7 8C 16G 300G 2台
  接入系统:redhed5.7 8C 16G 300G 2台
  数据库服务器:redhed5.7 16C 32G 4T 2台
  缓存服务器; redhed5.7 16C 16G 300G 2台

2、配置信息:
  管理系统配置参数:
JAVA_OPTS='-Xms4096m -Xmx8192m -XX:PermSize=256m -XX:MaxNewSize=1024m -XX:MaxPermSize=512m -XX:-UseGCOverheadLimit -Djava.awt.headless=true'

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="500" minSpareThreads="20" maxIdleTime="60000"/>


    <Connector executor="tomcatThreadPool" port="9005" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               enableLookups="false"
               URIEncoding="UTF-8"
               acceptCount="1000"/>
  接口系统配置参数:

JAVA_OPTS='-Xms2048m -Xmx4096m -XX:PermSize=256m -XX:MaxNewSize=1024m -XX:MaxPermSize=512m -XX:-UseGCOverheadLimit -Djava.awt.headless=true'


  接入系统配置参数:

java  -Xms4096m -Xmx4096m -jar ./mqttServer.jar  /usr/local/mqtt/properties/system.properties &

三、解决过程
1、jstack -F pid抓取堆栈信息

2、日志分析

Thread 12829: (state = IN_JAVA)
- java.util.HashMap.getEntry(java.lang.Object) @bci=81, line=465 (Compiled frame; information may be imprecise)
- java.util.HashMap.containsKey(java.lang.Object) @bci=2, line=449 (Compiled frame)
- com.avit.mqtt.MQTTServerHandler.userEventTriggered(io.netty.channel.ChannelHandlerContext, java.lang.Object) @bci=98, line=199 (Compiled frame)
- io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(java.lang.Object) @bci=16, line=315 (Compiled frame)
- io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(io.netty.channel.AbstractChannelHandlerContext, java.lang.Object) @bci=23, line=301 (Compiled frame)
- io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered(java.lang.Object) @bci=5, line=293 (Compiled frame)
- io.netty.handler.timeout.IdleStateHandler.channelIdle(io.netty.channel.ChannelHandlerContext, io.netty.handler.timeout.IdleStateEvent) @bci=2, line=343 (Compiled frame)
- io.netty.handler.timeout.IdleStateHandler$AllIdleTimeoutTask.run() @bci=144, line=468 (Compiled frame)
- io.netty.util.concurrent.PromiseTask$RunnableAdapter.call() @bci=4, line=38 (Compiled frame)
- io.netty.util.concurrent.ScheduledFutureTask.run() @bci=46, line=120 (Compiled frame)
- io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(long) @bci=26, line=339 (Compiled frame)
- io.netty.channel.nio.NioEventLoop.run() @bci=137, line=393 (Compiled frame)
- io.netty.util.concurrent.SingleThreadEventExecutor$5.run() @bci=44, line=742 (Interpreted frame)
- io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run() @bci=4, line=145 (Interpreted frame)
- java.lang.Thread.run() @bci=11, line=745 (Interpreted frame)


3、结论

多线程场景下不能使用hashMap,修改为concurrenthashmap后解决
分享到:
评论

相关推荐

    jmeter mqtt服务器压力测试

    总结来说,JMeter MQTT服务器压力测试是一项重要的性能验证手段,它帮助我们确保MQTT服务器在面对大规模并发连接和高频率消息传输时能够正常工作。通过深入理解MQTT协议、JMeter工具和定制化的加密方法,我们可以...

    ML307R OpenCPU MQTT使用

    OpenCPU通常包含嵌入式操作系统、网络协议栈和一系列API接口,方便开发者进行设备控制和数据处理。 2. **MQTT协议基础** MQTT设计目标是低带宽、低功耗和高可靠性,适合于远程或者移动设备之间的通信。它基于...

    BC26_MQTT_OPENCPU-master.zip

    实现MQTT功能意味着开发者可能使用了OpenCPU的编程接口(APIs)来编写应用程序,以便BC26模块能够连接到MQTT服务器,进行发布、订阅和消息交换。MQTT协议通常包括三个核心组件:发布者(Publisher)、代理(Broker)和...

    Linux系统设计-SIoT为一个为中小学STEM教育定制的跨平台的开源MQTT服务器程序

    SIoT为一个为中小学STEM教育定制的跨平台的开源MQTT服务器程序,S指科学(Science)、简单(Simple)的意思。SIoT支持Win10、Win7、Mac、Linux等操作系统,支持虚谷号、树莓派等迷你电脑,一键启动,无需注册和设置...

    mqtt压力测试,jmeter5.5-xmeter插件包

    总之,使用JMeter 5.5与XMeter插件进行MQTT压力测试,不仅可以全面评估MQTT服务器的性能,还可以帮助优化系统配置,确保在高并发环境下稳定运行。对于物联网应用开发者和运维人员来说,这是一种高效且强大的测试工具...

    MQTT测试客户端 Delphi10.3测试可用1

    这些库为开发者提供了方便的API,可以轻松地连接到MQTT服务器,发布和订阅主题,以及处理消息。TMQTTClient2可能是这个测试客户端的核心组件,它可能是一个自定义的组件类,封装了MQTT连接和操作的逻辑。 ...

    springboot+netty实现mqtt协议的broken

    1. MQTT服务器端点配置:使用Netty构建MQTT服务器,监听特定端口,处理进来的连接请求。 2. MQTT消息处理器:定义处理MQTT报文的处理器,如解析连接请求、订阅主题、发布消息等。 3. Spring Boot整合:将Netty服务器...

    paho.mqtt.c-1.3.8

    1. **连接与身份验证**:Paho MQTT C库1.3.8版支持TCP/IP连接,允许客户端与MQTT服务器建立安全的SSL/TLS连接。同时,它也支持基于用户名和密码的身份验证,增强了数据传输的安全性。 2. **发布与订阅**:库内含了...

    ESP32 MQTT的DEMO

    这些库为ESP32提供了与MQTT服务器交互的API,允许设备订阅主题并发布消息。 3. **连接到MQTT服务器**:DEMO中,ESP32会配置必要的参数,如服务器地址、端口、用户名和密码,然后建立TCP连接。连接成功后,设备可以...

    MQTT 中文协议文档.zip

    4. **保留消息**:MQTT允许服务器保留一条消息,当新的订阅者加入时,服务器可以将此保留消息推送给新订阅者,使得订阅者不会错过任何重要信息。 5. **持续连接**:MQTT支持持久连接(Keep Alive),客户端和服务器...

    MQTTnet:MQTTnet是用于基于MQTT的通信的高性能.NET库。 它提供了一个MQTT客户端和一个MQTT服务器(代理)。 该实现基于http://mqtt.org上的文档

    它提供了一个MQTT客户端和一个MQTT服务器(代理)。 该实现基于的文档。 产品特点 一般 异步支持 客户端和服务器(但不支持UWP服务器)的TLS支持 扩展的通信渠道(例如内存,TCP,TCP + TLS,WS) 轻量级(仅MQTT...

    MQTTnet:MQTTnet是用于基于MQTT的通信的高性能.NET库。 它提供了一个MQTT客户端和一个MQTT服务器(代理)。 该实现基于http中的文档

    它提供了一个MQTT客户端和一个MQTT服务器(代理)。 该实现基于的文档。 特征 一般的 异步支持 客户端和服务器(但不支持UWP服务器)的TLS支持 扩展的通信渠道(例如内存,TCP,TCP + TLS,WS) 轻量级(仅MQTT的...

    基于netty实现的mqtt客户端,可用于Java、Android环境.zip

    - 连接MQTT服务器,发送连接请求,并管理连接状态。 4. **适应Java和Android环境** Netty库在Java和Android平台上都能运行,但需要注意的是,Android系统对内存和CPU资源有限制,因此在构建Android版MQTT客户端时...

    .net开发的mqttclient客户端工具

    这些库提供了方便的API接口,帮助开发者快速实现与MQTT服务器的连接和消息交互。 3. **连接管理**:客户端需要能够建立到MQTT服务器的TCP连接,进行身份验证(如果服务器配置了认证),并保持连接的稳定。这可能...

    mqtt通讯,mqtt通讯协议,C/C++

    MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅式消息传输协议,广泛应用于物联网(IoT)领域,特别是在资源有限的设备之间进行通信。STM32F0系列是意法半导体(STMicroelectronics)推出的一...

    技小新-MQTT单片机编程小工具.rar

    MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,常用于物联网(IoT)设备之间的通信。在单片机编程中,MQTT被广泛应用于远程数据传输,因为它允许低功耗、低带宽的设备连接到云服务或...

    CPUtemperature:使用MQTT发送CPU温度

    标题中的“CPUtemperature:使用MQTT发送CPU温度”意味着这个项目是一个用C#语言编写的Windows服务程序,其主要功能是监测计算机的中央处理器(CPU)温度,并将这些温度数据通过MQTT(Message Queuing Telemetry ...

    mqtt_client_full_source(D7_XE7[32_64]).rar

    客户端通过连接到MQTT服务器(也称为Broker)来发布或订阅主题,以交换消息。主题是消息的路由键,允许消息的多播和单播。 2. Delphi编程环境: Delphi是一款强大的Object Pascal集成开发环境,以其高效的代码生成...

    ESP8266 串口接收 串口中断接收 NONOS_SDK-2.2.0_UART_MQTT.rar

    MQTT客户端(ESP8266)连接到MQTT服务器(也称为broker),订阅感兴趣的主题并发布消息到特定主题。 4. **NONOS SDK**:这是Espressif Systems为ESP8266开发的一个轻量级操作系统SDK,不包括完整的RTOS(实时操作...

    MQTT-Jmeter分布式测试相关配置文档1.rar

    分布式测试允许我们在多台机器上运行JMeter,以模拟更大规模的并发用户,这对于测试MQTT服务器的性能和稳定性至关重要。 首先,我们来看JMeter的分布式测试配置。在JMeter主节点上,需要修改jmeter.properties文件...

Global site tag (gtag.js) - Google Analytics