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

如图,我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信息、系统环境变量的配置信
JavaCore和HeapDump分析工具
当Java应用出现异常或者挂起时,JavaCore可以帮助开发者理解导致问题的原因,比如查找死锁、分析线程状态或者检查系统配置是否正确。
heapdump-tool工具
**内存分析**:heapdump-tool提供了强大的分析功能,如查找最大对象、最常分配的类、对象引用关系图等,这些信息有助于定位导致内存问题的原因。4.
heapdump.rar
heapdump.rar" 文件就是针对这种情况提供的一个工具或方法,用于事后分析和定位内存泄漏问题。"heapdump" 通常指的是内存堆转储,它记录了程序运行时堆内存的状态。


Web 开发
