One of the cool features with JDK 1.6 is that you can take a thread dump of a running VM. We were intermittently seeing spikes in our production servers and server would become slow for users whenever we saw a spike. we setup a cron job to take threaddump at regular interval and we nailed the issue. Most thread dumps were 300 KB but on was 25 MB and that ringed some bells. Looking at thread dump told use there were 3300 threads executing the same Runnable Task. Further investigation told us that we were using Executors.newCachedThreadPool to create a thread pool in Spring. This would create a new thread if not available for each submitted job. So it created 3300 threads, more CPU was spent on switching thread context than really doing the job. Using Executors.newFixedThreadPool with a size of 15 solved the issue :).
Here is a sample of a consumer and producer example for RabbitMQ. The steps are Download Erlang Download Rabbit MQ Server Download Rabbit MQ Java client jars Compile and run the below two class and you are done. This sample create a Durable Exchange, Queue and a Message. You will have to start the consumer first before you start the for the first time. For more information on AMQP, Exchanges, Queues, read this excellent tutorial http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/ +++++++++++++++++RabbitMQProducer.java+++++++++++++++++++++++++++ import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel; import com.rabbitmq.client.*; public class RabbitMQProducer { public static void main(String []args) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setUsername("guest"); factory.setPassword("guest"); factory.setVirtualHost("/"); factory.setHost("127.0.0.1"); factory.se...
I would like to know more about thread dump to solve the problem in our application. Our application running in weblogic 8.1 clustered instance.Once applications went to infinite loop and other problems. We tried to take thread dump. But not able to create thread dump for our instance. what could be the reason?
ReplyDeletewell weblogic is a multithreaded application and you should be able to take a thread dump if you plugin in this JSP. What Jvm are you running on? This assumes that you are running jdk1.5 and above
ReplyDelete