| Author | 
		  Message
		 | 
		
		  | UncleAndy | 
		  
		    
			  
				 Posted: Thu Sep 15, 2005 3:28 am    Post subject: Urgent: multi-thread issue with MQ client (C#) | 
				     | 
			   
			 
		   | 
		
		
		   Newbie
 
 Joined: 15 Sep 2005 Posts: 7
  
  | 
		  
		    
			  
				Hi,
 
 
I am experiencing problems when running multiple threads against my MQ Server. WebSphere MQ v.5.3 (with CSD 10) is installed on a Windows 2000 Server (with decent hardware) and my client is located on a separate box (also Windows 2000 Server).  The client is written in C# and communicates over TCP. Each thread creates a new instance of the queue manager, MQ environment and sender/receiver channels. A dummy server is set up to get messages from one queue and place a response on another which is retrieved from the client.
 
 
When the traffic load is "high" (10 simultanious threads..) everything works fine until a certain point when things seem to get clogged up. The 10 threads are started simultaniously and perform 1 request each. When all 10 threads have completed, 10 new threads are spawned and does that same operation. The QM object is created successfully, but when I invoke methods (qMgr.Get(), gMgr.MaximumHandles() etc) I get a null pointer exception and it seems like the QM object has lost connection with the server. The server does not recover from this, and I experience more and more threads throwing exceptions until I shut down MQ and restart it to get a fresh start.
 
 
I also experience exceptions identified as MQRC_HOBJ_ERROR, which indicates that an object handle is invalid. The corrective action for this is:
 
 
   
	| Quote: | 
   
  
	| Ensure that a successful  MQOPEN  call is performed for this object | 
   
 
 
 
Do I have to put in a check for each time I use the QM object to see if it's still "open"? If so, how can this done? 
 
 
Single thread works fine, and as mentioned above multiple threads also work fine until a certain point. 
 
 
This is critical to us right now, and I need to sort this out ASAP. I would appreciate any help! 
 
 
Thanks!
 
 
Andreas | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | jefflowrey | 
		  
		    
			  
				 Posted: Thu Sep 15, 2005 8:24 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Grand Poobah
 
 Joined: 16 Oct 2002 Posts: 19981
  
  | 
		  
		    
			  
				I'd say you're probably running out of available client connections on the qmgr.
 
 
This is a really bad design for your app - you'd never code a database app the same way, I hope.
 
 
I would change your code to establish the qmgr connection as a thread-shareable connection, and use exactly one connection for each qmgr you need, and only close it when your program ends or when an error indicates that the qmgr is down. _________________ I am *not* the model of the modern major general. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | UncleAndy | 
		  
		    
			  
				 Posted: Thu Sep 15, 2005 11:16 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Newbie
 
 Joined: 15 Sep 2005 Posts: 7
  
  | 
		  
		    
			  
				Thank you for you input! The reason why I created a new instance of the QM for each request was that it was actually suggested in one of the IBM eBooks.. (please shoot me if I misunderstood that!   ). I am currently changing the client now to only keep one connection to the QM open at the time.
 
 
Let's hope this will solve my issue!
 
 
Andreas | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | UncleAndy | 
		  
		    
			  
				 Posted: Tue Sep 20, 2005 12:39 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Newbie
 
 Joined: 15 Sep 2005 Posts: 7
  
  | 
		  
		    
			  
				I still have problems when traffic is high. What happens is that I get a null pointer exception when I try to access the queues (either through QueueManager.AccessQueues or QueueManager.Get/Put). 
 
 
Does anyone know the cause of this? Is the MQ Server dropping connections because the number is too high? I have tried to increase the values for: 
 
 
MaxChannels (1024) 
 
MaxActiveChannels (1024) 
 
MaxInitiators (32) 
 
ListenerBackLog (512) 
 
EntryPoints (100) 
 
 
- all config settings for the QM available through the MQ Services console. 
 
 
Any other settings I should look at? 
 
 
Andreas | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | jefflowrey | 
		  
		    
			  
				 Posted: Tue Sep 20, 2005 3:35 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Grand Poobah
 
 Joined: 16 Oct 2002 Posts: 19981
  
  | 
		  
		    
			  
				I guess you should confirm that you're not trying to access a null pointer...
 
 
If it were an issue with MQ dropping connections, you should get a reason code back that told you something, and there would be error messages in the queue manager system log. _________________ I am *not* the model of the modern major general. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | JasonE | 
		  
		    
			  
				 Posted: Tue Sep 20, 2005 3:40 am    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Grand Master
 
 Joined: 03 Nov 2003 Posts: 1220 Location: Hursley 
  | 
		  
		    
			  
				Whats the call stack from the null pointer? Your code, or MQ's?
 
 
What version/release of mq? If 5.3, try applying fixpack 10 or 11, registering the amqmdnet.dll into the GAC and seeing if the problem continues
 
 
Can you cut the code down to a trivial sample, and post here? | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | 
		    
		   |