You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by "a@frogl" <aj...@gmail.com> on 2009/10/22 10:56:22 UTC
Connection handling + TCP CLOSE_WAIT on Linux + Solaris
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.
Re: Connection handling + TCP CLOSE_WAIT on Linux + Solaris
Posted by Eric-AWL <er...@atosorigin.com>.
Hi !
I'm interesting by this problem.
- Have you 1000 CLOSE_WAIT or less ?
- Do you know if these CLOSE_WAIT disappear after a while ?
- Do you know if these CLOSE_WAIT happen if messages are consumed ?
Eric-AWL
a@frogl wrote:
>
> 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://old.nabble.com/Connection-handling-%2B-TCP-CLOSE_WAIT-on-Linux-%2B-Solaris-tp26006364p26925942.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.