有懂看heapdump的帮我看下这个是什么原因,导致堆内存在一直加吗

紫川琴秀 CSDN会员 紫川琴秀 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

如图,我tomcat启动,只要过了一晚上,内存就能一直加上去,我dump了一份堆信息,麻烦,帮我看下,是哪一个部分出了问题。
看起来最高的百分比是class java/lang/ApplicationShutdownHooks
我使用了rocketmq,里面有一句代码是:
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
producer.shutdown();
}
}));


类的整体代码我也贴一下

package com.qh_goal;
import com.alibaba.rocketmq.client.exception.MQClientException;
import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
import com.alibaba.rocketmq.client.producer.SendResult;
import com.alibaba.rocketmq.common.message.Message;


//生产者
public class SmsProducer {
final static DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupSMSResult");
static{
producer.setNamesrvAddr(PublicParameter.ElasticsearchProducer_addr);
producer.setInstanceName("ProducerSMSResult");
producer.setMaxMessageSize(1024*1000*20);
try {
System.out.println("ProducerSMSResult开始加载");
producer.start();
System.out.println("ProducerSMSResult开始成功");
} catch (MQClientException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public static void pushMsg(String topic,String tag,String key,String _msg) throws MQClientException,
InterruptedException {
/**
* 一个应用创建一个Producer,由应用来维护此对象,可以设置为全局对象或者单例<br>
* 注意:ProducerGroupName需要由应用来保证唯一,一类Producer集合的名称,这类Producer通常发送一类消息,且发送逻辑一致<br>
* ProducerGroup这个概念发送普通的消息时,作用不大,但是发送分布式事务消息时,比较关键,
* 因为服务器会回查这个Group下的任意一个Producer
*/


//nameserver服务

/**
* Producer对象在使用之前必须要调用start初始化,初始化一次即可<br>
* 注意:切记不可以在每次发送消息时,都调用start方法
*/




/**
* 下面这段代码表明一个Producer对象可以发送多个topic,多个tag的消息。
* 注意:send方法是同步调用,只要不抛异常就标识成功。但是发送成功也可会有多种状态,<br>
* 例如消息写入Master成功,但是Slave不成功,这种情况消息属于成功,但是对于个别应用如果对消息可靠性要求极高,<br>
* 需要对这种情况做处理。另外,消息可能会存在发送失败的情况,失败重试由应用来处理。
*/
try {


Message msg = new Message(topic,// topic
tag,// tag
key,// key消息关键词,多个Key用KEY_SEPARATOR隔开(查询消息使用)
_msg.getBytes());// body
SendResult sendResult = null;
try {
sendResult = producer.send(msg);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println("111111111111111111111111");
System.out.println(sendResult);


} catch (Exception e) {
e.printStackTrace();
}

/**
* 应用退出时,要调用shutdown来清理资源,关闭网络连接,从MetaQ服务器上注销自己
* 注意:我们建议应用在JBOSS、Tomcat等容器的退出钩子里调用shutdown方法
*/
// producer.shutdown();
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
producer.shutdown();
}
}));

}


// public static void main(String[] args) throws MQClientException, InterruptedException {
// Producer.pushMsg("qhcrm","10", "13609560706");
// }
}
...全文

相关推荐

heapdump分析工具

首先,heapdump是一个包含Java虚拟机(JVM)堆内存快照的文件,它记录了程序运行时所有对象以及它们之间的引用关系。

月影紫风

【web安全】Spring boot heapdump获取敏感信息

一、概述 微服务是目前较为热门的技术,Spring boot 是 Spring 的一套快速配置脚手架,可以基于Spring boot 快速开发单个微服务,微服务的特点决定了功能模块分布式部署,在不同的机器上相互通过服务调用进行交互,业务流会经过多个微服务的处理和传递。 ​ 多个微服务下,微服务的监控显得尤为重要。Actuator组件为Spring Boot提供对应用系统的监控和管理的集成功能,可以查看应用配置的详细信息,例如自动化配置信息、创建的Spring beans信息、系统环境变量的配置信

IT老涵

JavaCore和HeapDump分析工具

当Java应用出现异常或者挂起时,JavaCore可以帮助开发者理解导致问题的原因,比如查找死锁、分析线程状态或者检查系统配置是否正确。

zhushulikm

heapdump-tool工具

**内存分析**:heapdump-tool提供了强大的分析功能,如查找最大对象、最常分配的类、对象引用关系图等,这些信息有助于定位导致内存问题的原因。4.

weixin_45917137

heapdump.rar

heapdump.rar" 文件就是针对这种情况提供的一个工具或方法,用于事后分析和定位内存泄漏问题。"heapdump" 通常指的是内存堆转储,它记录了程序运行时堆内存的状态。

hhh214160446
评论 3
收藏 已收藏
分享
返回顶部
紫川琴秀 CSDN会员
Web 开发 81,108 成员 341,721 内容