Memory leaks ActiveMQ性能:内存泄漏
早上好 我是JMS技术的新用户,尤其是ActiveMQ解决方案的新用户。我的应用程序的性能有一些问题。具体来说,我正在开发一个全天候的应用程序。我们正在为所有消费者使用MessageListener。我的规格:Memory leaks ActiveMQ性能:内存泄漏,memory-leaks,activemq,Memory Leaks,Activemq,早上好 我是JMS技术的新用户,尤其是ActiveMQ解决方案的新用户。我的应用程序的性能有一些问题。具体来说,我正在开发一个全天候的应用程序。我们正在为所有消费者使用MessageListener。我的规格: 我在VMWare虚拟机中运行我的应用程序:单CPU、2GB RAM、20GB本地磁盘。SO:Win7(32位) 带标准配置的Java SE 1.6.35 ActiveMQ 5.5.1,无任何tunning修改。具体地说,我使用的是具有非持久性交付模式(仅限于队列)的生产者和异步使用者。
- 我在VMWare虚拟机中运行我的应用程序:单CPU、2GB RAM、20GB本地磁盘。SO:Win7(32位)
- 带标准配置的Java SE 1.6.35
- ActiveMQ 5.5.1,无任何tunning修改。具体地说,我使用的是具有非持久性交付模式(仅限于队列)的生产者和异步使用者。使用者和生产者都使用来自同一连接的不同会话李>
**Producer code - main class -**
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url+"?jms.prefetchPolicy.all=1");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue(subject);
MessageProducer producer = session.createProducer(destination);
while (true)
{
Event evento = new Event("Event1");
ObjectMessage msj = session.createObjectMessage(event);
msj5.setJMSType(msj5.getClass().getSimpleName());
msj5.setJMSReplyTo(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
producer.send(msj5, DeliveryMode.NON_PERSISTENT, 5, 0);
Thread.sleep(1000);
}
**Consumer code -main class-**
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url+"?jms.prefetchPolicy.all=1");
Connection connection = connectionFactory.createConnection();
session = connection.createSession(true, 0);
Destination destination = session.createQueue(subject);
MessageConsumer consumer = session.createConsumer(destination);
//This is my listener
Escuchador escuchador = new Escuchador();
consumer.setMessageListener(escuchador);
connection.start();
**Listener code**
public void onMessage(Message message)
{
if (message instanceof ObjectMessage)
{
try
{
ObjectMessage msj = (ObjectMessage) message;
Object obj = msj.getObject();
if (obj instanceof Event)
{
Event event = (Event) obj;
System.out.println("Event: " + event.toString());
}
}
catch (JMSException e)
{
System.out.println("Error at ObjectMessage");
}
}
}
consumer和producer都是从一个主类执行的,该主类创建了它们的两个实例(每个实例一个)。然后,我制作了一个可运行的jar文件,并从JProfiler工具运行它。在结果中显示“ActiveMQObjectMessage”和“MessageId”引用(在记录的对象视图中),以及“getObject”和“createObjectMessage”(在分配热点中)。当我进入其中每一个(看到他的输入和输出引用)时,我总是实现“activeMQSession”对象
关键是我不能关闭连接或会话对象,因为我不想停止24x7服务。我的问题是:可能吗?或者我需要关闭连接以提高性能
提前谢谢
关于您是否找到了解决此问题的方法?