activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "a@frogl" <ajlstu...@gmail.com>
Subject Connection handling + TCP CLOSE_WAIT on Linux + Solaris
Date Thu, 22 Oct 2009 08:56:22 GMT

This simple example will show connections accumulating in CLOSE_WAIT on a
2.6.31 Linux kernel (Ubuntu) and Solaris10.  This is true for the most
recent release 5.3.0 and 5.1.X (which I am currently using).   

I have read the forum entries relating the issues relating to CLOSE_WAIT,
but there seems to be no conclusive reason why this is actually happening.  

I have tried a number of configuration options, as suggested by the forum -
including the use of (not available to 5.1.X)

      <transportConnectors>
        <transportConnector name="openwire"
uri="tcp://localhost:61616?transport.closeAsync=false"/>
     </transportConnectors>

but none seem to prevent it from happening.

As lifted from the most trivial of "hello worlds"

public static void main(String[] args) throws Exception
	{
		int i = 0;	
		while(i++ < 1000)
		{
			SendTest sendTest = new SendTest();
			sendTest.send();
		}
	}
	private void send()
	{
	            try {
	                ActiveMQConnectionFactory connectionFactory = new
ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
	                Connection connection =
connectionFactory.createConnection();
	                connection.start();

	                Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);

	                Destination destination = session.createQueue("TEST.FOO");

	                MessageProducer producer =
session.createProducer(destination);
	                producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

	                String text = "Hello world! From: " +
Thread.currentThread().getName() + " : " + this.hashCode();
	                TextMessage message = session.createTextMessage(text);

	                System.out.println("Sent message: "+ message.hashCode() + "
: " + Thread.currentThread().getName());
	                producer.send(message);
	                session.close();
	                connection.close();
	            }
	            catch (Exception e) {
	                System.out.println("Caught: " + e);
	                e.printStackTrace();
	            }
	}

Running it results in the following,

a@frogl:~/apps/apache-activemq-5.3.0/bin$ netstat -a |grep CLOSE
tcp6       0      0 localhost:61616         localhost:46831        
CLOSE_WAIT
tcp6       0      0 localhost:61616         localhost:46944        
CLOSE_WAIT
tcp6       0      0 localhost:61616         localhost:46856        
CLOSE_WAIT
tcp6       0      0 localhost:61616         localhost:46978        
CLOSE_WAIT
tcp6       0      0 localhost:61616         localhost:46489        
CLOSE_WAIT
tcp6       0      0 localhost:61616         localhost:46890        
CLOSE_WAIT
tcp6       0      0 localhost:61616         localhost:47257        
CLOSE_WAIT
a@frogl:~/apps/apache-activemq-5.3.0/bin$

I am well aware that re-using the connection is preferable. Can anybody
provide any additional insight as to why these connections result in
CLOSE_WAITs?   Thanks in advance

    
-- 
View this message in context: http://www.nabble.com/Connection-handling-%2B-TCP-CLOSE_WAIT-on-Linux-%2B-Solaris-tp26006364p26006364.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Mime
View raw message