一、问题现象
线网环境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服务器压力测试是一项重要的性能验证手段,它帮助我们确保MQTT服务器在面对大规模并发连接和高频率消息传输时能够正常工作。通过深入理解MQTT协议、JMeter工具和定制化的加密方法,我们可以...
OpenCPU通常包含嵌入式操作系统、网络协议栈和一系列API接口,方便开发者进行设备控制和数据处理。 2. **MQTT协议基础** MQTT设计目标是低带宽、低功耗和高可靠性,适合于远程或者移动设备之间的通信。它基于...
实现MQTT功能意味着开发者可能使用了OpenCPU的编程接口(APIs)来编写应用程序,以便BC26模块能够连接到MQTT服务器,进行发布、订阅和消息交换。MQTT协议通常包括三个核心组件:发布者(Publisher)、代理(Broker)和...
SIoT为一个为中小学STEM教育定制的跨平台的开源MQTT服务器程序,S指科学(Science)、简单(Simple)的意思。SIoT支持Win10、Win7、Mac、Linux等操作系统,支持虚谷号、树莓派等迷你电脑,一键启动,无需注册和设置...
总之,使用JMeter 5.5与XMeter插件进行MQTT压力测试,不仅可以全面评估MQTT服务器的性能,还可以帮助优化系统配置,确保在高并发环境下稳定运行。对于物联网应用开发者和运维人员来说,这是一种高效且强大的测试工具...
这些库为开发者提供了方便的API,可以轻松地连接到MQTT服务器,发布和订阅主题,以及处理消息。TMQTTClient2可能是这个测试客户端的核心组件,它可能是一个自定义的组件类,封装了MQTT连接和操作的逻辑。 ...
1. MQTT服务器端点配置:使用Netty构建MQTT服务器,监听特定端口,处理进来的连接请求。 2. MQTT消息处理器:定义处理MQTT报文的处理器,如解析连接请求、订阅主题、发布消息等。 3. Spring Boot整合:将Netty服务器...
1. **连接与身份验证**:Paho MQTT C库1.3.8版支持TCP/IP连接,允许客户端与MQTT服务器建立安全的SSL/TLS连接。同时,它也支持基于用户名和密码的身份验证,增强了数据传输的安全性。 2. **发布与订阅**:库内含了...
这些库为ESP32提供了与MQTT服务器交互的API,允许设备订阅主题并发布消息。 3. **连接到MQTT服务器**:DEMO中,ESP32会配置必要的参数,如服务器地址、端口、用户名和密码,然后建立TCP连接。连接成功后,设备可以...
4. **保留消息**:MQTT允许服务器保留一条消息,当新的订阅者加入时,服务器可以将此保留消息推送给新订阅者,使得订阅者不会错过任何重要信息。 5. **持续连接**:MQTT支持持久连接(Keep Alive),客户端和服务器...
它提供了一个MQTT客户端和一个MQTT服务器(代理)。 该实现基于的文档。 产品特点 一般 异步支持 客户端和服务器(但不支持UWP服务器)的TLS支持 扩展的通信渠道(例如内存,TCP,TCP + TLS,WS) 轻量级(仅MQTT...
它提供了一个MQTT客户端和一个MQTT服务器(代理)。 该实现基于的文档。 特征 一般的 异步支持 客户端和服务器(但不支持UWP服务器)的TLS支持 扩展的通信渠道(例如内存,TCP,TCP + TLS,WS) 轻量级(仅MQTT的...
- 连接MQTT服务器,发送连接请求,并管理连接状态。 4. **适应Java和Android环境** Netty库在Java和Android平台上都能运行,但需要注意的是,Android系统对内存和CPU资源有限制,因此在构建Android版MQTT客户端时...
这些库提供了方便的API接口,帮助开发者快速实现与MQTT服务器的连接和消息交互。 3. **连接管理**:客户端需要能够建立到MQTT服务器的TCP连接,进行身份验证(如果服务器配置了认证),并保持连接的稳定。这可能...
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅式消息传输协议,广泛应用于物联网(IoT)领域,特别是在资源有限的设备之间进行通信。STM32F0系列是意法半导体(STMicroelectronics)推出的一...
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,常用于物联网(IoT)设备之间的通信。在单片机编程中,MQTT被广泛应用于远程数据传输,因为它允许低功耗、低带宽的设备连接到云服务或...
标题中的“CPUtemperature:使用MQTT发送CPU温度”意味着这个项目是一个用C#语言编写的Windows服务程序,其主要功能是监测计算机的中央处理器(CPU)温度,并将这些温度数据通过MQTT(Message Queuing Telemetry ...
客户端通过连接到MQTT服务器(也称为Broker)来发布或订阅主题,以交换消息。主题是消息的路由键,允许消息的多播和单播。 2. Delphi编程环境: Delphi是一款强大的Object Pascal集成开发环境,以其高效的代码生成...
MQTT客户端(ESP8266)连接到MQTT服务器(也称为broker),订阅感兴趣的主题并发布消息到特定主题。 4. **NONOS SDK**:这是Espressif Systems为ESP8266开发的一个轻量级操作系统SDK,不包括完整的RTOS(实时操作...
分布式测试允许我们在多台机器上运行JMeter,以模拟更大规模的并发用户,这对于测试MQTT服务器的性能和稳定性至关重要。 首先,我们来看JMeter的分布式测试配置。在JMeter主节点上,需要修改jmeter.properties文件...