Author |
Message
|
Vitor |
Posted: Thu Dec 28, 2006 1:36 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
I'd have said RAM but you'll need to investigate the resources on your box to make certain _________________ Honesty is the best policy.
Insanity is the best defence. |
|
Back to top |
|
 |
SilentWind |
Posted: Thu Dec 28, 2006 1:44 am Post subject: |
|
|
Acolyte
Joined: 11 Jan 2006 Posts: 58
|
I shall list my server specifications here, just to clarify things.
IBM XSeries345 Intel(r) Xeo 2.40GHz 3.93GB RAM
My client specs have a wide range but most of them are currently Dell Precision PWS380 or M90 Intel(r) P4 2-3GHz 2-3.50GB RAM
Also, does MQ on Redhat Linux 7.3 gives a better performance than Windows?
Thanks for all the advice to date. They have proven to be very useful. |
|
Back to top |
|
 |
Vitor |
Posted: Thu Dec 28, 2006 1:46 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
SilentWind wrote: |
Also, does MQ on Redhat Linux 7.3 gives a better performance than Windows?
|
Almost everything does work better on Linux than Windows  _________________ Honesty is the best policy.
Insanity is the best defence. |
|
Back to top |
|
 |
jefflowrey |
Posted: Thu Dec 28, 2006 2:57 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
But I'd use a newer version of RedHat than 7.3.
But take care to use a supported version - some of the newest versions use an incompatible version of glibc. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
RogerLacroix |
Posted: Thu Dec 28, 2006 9:29 am Post subject: |
|
|
 Jedi Knight
Joined: 15 May 2001 Posts: 3264 Location: London, ON Canada
|
Hi,
A while ago, I did some testing with a QMgr (v5.3) on Solaris 8 and started up a variety of client applications (JMS, Java, C, etc..) that connected remotely to the QMgr. Roughly speaking, each connection used 750KB of memory (excluding OS and other applications).
Therefore, 4500 connections would use roughly 3.375GB of memory (excluding the OS and other applications). Since, you ONLY have 4GB of RAM installed your Windows server, you most certainly are running out of memory.
SilentWind wrote: |
Also, does MQ on Redhat Linux 7.3 gives a better performance than Windows? |
Humm, yes WMQ v5.3 will work but you REALLY should use something a little newer. i.e. RHEL v3 or SLES v8. Fedora Core 3 works great but IBM does not officially support it.
Regards,
Roger Lacroix
Capitalware Inc. _________________ Capitalware: Transforming tomorrow into today.
Connected to MQ!
Twitter |
|
Back to top |
|
 |
SilentWind |
Posted: Wed Jan 03, 2007 5:42 pm Post subject: |
|
|
Acolyte
Joined: 11 Jan 2006 Posts: 58
|
RogerLacroix wrote:
Quote: |
Roughly speaking, each connection used 750KB of memory (excluding OS and other applications).
Therefore, 4500 connections would use roughly 3.375GB of memory (excluding the OS and other applications). Since, you ONLY have 4GB of RAM installed your Windows server, you most certainly are running out of memory. |
That is interesting. I did a CPU and memory test for my applications. Apparently, each of my JMS client takes up approx 200KB. I tried going for 5000 subscribers again. Therefore
5000 x 200KB = 1GB.
Again, I reached the limit of around 4500. The same error message is displayed. My CPU has not reached 100% and my RAM has left 1GB (I had only 2GB at the start of the experiment, 2GB - 1GB = 1GB)
Thus, I am still confused what resources I am exactly running low on.  |
|
Back to top |
|
 |
mvic |
Posted: Wed Jan 03, 2007 6:37 pm Post subject: |
|
|
 Jedi
Joined: 09 Mar 2004 Posts: 2080
|
SilentWind wrote: |
Also, I have learnt that in MQ implementation, 1 JMS topic is equivalent to 1 connection to the MQ server (I have confirmed this using netstat). Therefore in the worst case, I would have 500x20 = 10,000 connections to the MQ server. |
Don't understand. How/why do you have one connection per topic? |
|
Back to top |
|
 |
pathipati |
Posted: Wed Jan 03, 2007 8:37 pm Post subject: |
|
|
Master
Joined: 03 Mar 2006 Posts: 296
|
SilentWind wrote:
Quote: |
Also, I have learnt that in MQ implementation, 1 JMS topic is equivalent to 1 connection to the MQ server (I have confirmed this using netstat). Therefore in the worst case, I would have 500x20 = 10,000 connections to the MQ server. |
What did you see after running netstat? |
|
Back to top |
|
 |
pathipati |
Posted: Wed Jan 03, 2007 8:40 pm Post subject: |
|
|
Master
Joined: 03 Mar 2006 Posts: 296
|
SilentWind wrote: |
Also, I have learnt that in MQ implementation, 1 JMS topic is equivalent to 1 connection to the MQ server (I have confirmed this using netstat). Therefore in the worst case, I would have 500x20 = 10,000 connections to the MQ server. |
What did you see after running netstat? |
|
Back to top |
|
 |
SilentWind |
Posted: Wed Jan 03, 2007 9:10 pm Post subject: |
|
|
Acolyte
Joined: 11 Jan 2006 Posts: 58
|
pathipati wrote:
Quote: |
What did you see after running netstat? |
I have one TCP entry for each connection. For example, if my server is at x.x.x.x:1234 and my client is at y.y.y.y. I have 20 topics subscribed by this client. I will have 20 entries of
TCP y.y.y.y:1111 x.x.x.x:1234 ESTABLISHED
TCP y.y.y.y:1112 x.x.x.x:1234 ESTABLISHED
TCP y.y.y.y:1113 x.x.x.x:1234 ESTABLISHED
TCP y.y.y.y:1114 x.x.x.x:1234 ESTABLISHED
TCP y.y.y.y:1115 x.x.x.x:1234 ESTABLISHED
TCP y.y.y.y:1116 x.x.x.x:1234 ESTABLISHED
......
Actual numbers of client port may differ, but they all connect to the same port on the server.
mvic wrote:
Quote: |
Don't understand. How/why do you have one connection per topic? |
As stated above, I have 20 topics for this client, and subsequently have 20 connections, as seen in the netstat. I will post a sample of my actual client code here.
Code: |
MQTopicConnection factory = new MQTopicConnectionFactory();
....
TopicConnection connection = factory.createTopicConnection();
....
TopicSession session1 = connection.createTopicSession( .... );
Topic topic1 = session1.createTopic( .... );
TopicSubscriber subscriber = session1.createSubscriber(topic1);
TopicSession session2 = connection.createTopicSession( .... );
Topic topic2 = session2.createTopic( .... );
TopicSubscriber subscriber = session2.createSubscriber(topic2);
(x 18 more)
.....
|
As above, I am reusing the same TopicConnection for each Topic, TopicSession, TopicSubscriber. Hence I expect I have 1 single TCP connection for 20 topics. But according to netstat and MQ server status, I have 20 connections! Why is this so?
If I can solve this problem, the "system resources low" problem would be redundant.
Thank you all for your assistance again. |
|
Back to top |
|
 |
mvic |
Posted: Thu Jan 04, 2007 1:04 am Post subject: |
|
|
 Jedi
Joined: 09 Mar 2004 Posts: 2080
|
SilentWind wrote: |
I am reusing the same TopicConnection for each Topic, TopicSession, TopicSubscriber. Hence I expect I have 1 single TCP connection for 20 topics. But according to netstat and MQ server status, I have 20 connections! Why is this so? |
There is one MQI connection (ie. HConn) for every JMS Session. The MQI transaction scope is the HConn, but the JMS transaction scope is the Session. Therefore in order to implement a Session, the MQ JMS classes must have a separate HConn for it.
So, to reduce the number of MQ connections to the queue manager (and thus the number of TCP/IP connections) is it possible to do your work under one Session? |
|
Back to top |
|
 |
Vitor |
Posted: Thu Jan 04, 2007 1:21 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
mvic wrote: |
There is one MQI connection (ie. HConn) for every JMS Session. The MQI transaction scope is the HConn, but the JMS transaction scope is the Session. Therefore in order to implement a Session, the MQ JMS classes must have a separate HConn for it.
So, to reduce the number of MQ connections to the queue manager (and thus the number of TCP/IP connections) is it possible to do your work under one Session? |
Slightly off topic, but thank you for clairifying the position.
(Please see back a few posts for my confusion. I've just got to improve my Java/JMS) _________________ Honesty is the best policy.
Insanity is the best defence. |
|
Back to top |
|
 |
SilentWind |
Posted: Thu Jan 04, 2007 2:20 am Post subject: |
|
|
Acolyte
Joined: 11 Jan 2006 Posts: 58
|
Vitor wrote:
Quote: |
Slightly off topic, but thank you for clairifying the position. |
Apologies, I did not want to bring up anything related to Java, especially posting Java code here but I felt that it would help everyone understand my problem further.
mvic wrote:
Quote: |
There is one MQI connection (ie. HConn) for every JMS Session. The MQI transaction scope is the HConn, but the JMS transaction scope is the Session. Therefore in order to implement a Session, the MQ JMS classes must have a separate HConn for it.
So, to reduce the number of MQ connections to the queue manager (and thus the number of TCP/IP connections) is it possible to do your work under one Session? |
That is a good point. Actually I tried that already. That achieves ONE connection. But there are several problems relating to it:
1) The first subscriber receives messages faster than the others
2) The subscribers take significantly longer to register their listeners
3) Upon receiving their respective topics, they will throw a BrokerException error and will disconnect from the server. The interval and exact error message I will post at a later date as I would need to run the test again because I did not take down the exact results.
Any ideas?  |
|
Back to top |
|
 |
Vitor |
Posted: Thu Jan 04, 2007 2:25 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
SilentWind wrote: |
Vitor wrote:
Quote: |
Slightly off topic, but thank you for clairifying the position. |
Apologies, I did not want to bring up anything related to Java, especially posting Java code here but I felt that it would help everyone understand my problem further.
|
No apology needed, I should apologise for blurting my ignorance and needing to be clarify. I do feel JMS is a relevant subject, just my questions were not directly connected to your issue.  _________________ Honesty is the best policy.
Insanity is the best defence. |
|
Back to top |
|
 |
mvic |
Posted: Thu Jan 04, 2007 2:36 am Post subject: |
|
|
 Jedi
Joined: 09 Mar 2004 Posts: 2080
|
SilentWind wrote: |
1) The first subscriber receives messages faster than the others |
The ordering of messages is very system- and implementation-dependent. Given that it's a requirement that each subscriber process messages immediately and in parallel with the others, you need a Session for each one. JMS says the Session must be used and usable on only one thread at a time. Also, let's say a system has 1000 subscribers - should the system give a message to subscriber 1, then give a message to subscriber 2, etc. or should it give several to subscriber 1, then give several to subscriber 2, etc. In this scheme, subscriber 1000 might wait a very long time for messages. Parallel execution is not an option within the same Session, so some linearity is inevitable. The quick answer to this is: have very few subscribers per Session if possible.
But from previous posts multiple Sessions appears not the best solution either. Was it really the multiple-session (multiple MQI connection) issue that was causing your problems? It would be a pity to solve a problem that didn't need solving here.
Quote: |
2) The subscribers take significantly longer to register their listeners |
Like, how long?
Quote: |
3) Upon receiving their respective topics, they will throw a BrokerException error and will disconnect from the server. The interval and exact error message I will post at a later date as I would need to run the test again because I did not take down the exact results. |
Suggest you raise a call with IBM Support - sounds like a bug. Please post the details if/when you have them. |
|
Back to top |
|
 |
|