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 :).
Update: This JSP does not work on a thread that is inside some native code. On many occasions I had a thread stuck in JNI code and it wont work. Also in some cases thread.stop can cause jvm to hang. According to javadocs " This method is inherently unsafe. Stopping a thread with Thread.stop causes it to unlock all of the monitors that it has locked". I have used it only in some rare occasions where I wanted to avoid a system shutdown and in some cases we ended up doing system shutdown as jvm was hung so I had a 70-80% success with it. -------------------------------------------------------------------------------------------------------------------------- We had an interesting requirement. A tomcat thread that was spawned from an ExecutorService ThreadPool had gone Rogue and was causing lots of disk churning issues. We cant bring down the production server as that would involve downtime. Killing this thread was harmless but how to kill it, t
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