Once you get into a production like stage with more data volume, more users, etc. you will find yourself pretty fast in the situation where Glassfish gets some hickups or slowness. An expected situation if you did not change the default parameters out of the box which are chosen to make Glassfish to run even on a small box.
We ran into some kind of concurrency problems with JDBC pools and thread where Glassfish appeared to be hanging. One approach is to create thread dumps for the JVM.
With Glassfish we have a few options:
- jstack
Run jps which returns you the list of applications running a JVM, choose the PID and execute
jstack <PID> or jstack -F <PID> > td.log - asadmin
Go the Glassfish_HOME/bin folder and execute
./asadmin --user admin generate-jvm-report --type=thread > threaddump.txt
- kill -3 <PID>
Supposed to create a dump in the default log folder of Glassfish. Doesnt work for me.
With the (or better more than 1) file at hand you can evaluate them by hand or use some of the tools around. I am still struggling to make the tool analyzing my dumps. They simply open the files like a editor.
Some References
- Samurai Analyzer
- TDA
- IBM dev community tool
- http://planet.jboss.org/post/simple_tools_to_analyze_thread_dumps
- https://sites.google.com/site/threaddumps/java-thread-dumps
- http://architects.dzone.com/articles/how-analyze-java-thread-dumps
- http://www.javacodegeeks.com/2012/03/jvm-how-to-analyze-thread-dump.html
