Saturday, September 14, 2013

Why long way for thread dump on UNIX machines

jps - Java process list :JDK command tool

I was looking for a diagnostic ways with freely available tools from JDK then I found the great valuable command tool 'jps'. The jps command can be used with three options(l, v, m). it can work for any Java - JEE Servers such as WebLogic, WebSphere, JBoss, Tomcat. In other words, any app server that uses the latest JDK 5+ version (version 6, 7, 8 also supports). Let me walk-through those interesting options in Win and *nix platforms. Before you execute this command tool, make sure that JAVA_HOME\bin is in the the PATH setting.
Java Command tool : jps options

jps -l

this -l option will gives the full Java package name of that invoked the Java process. 
?
1
2
3
C:\Users\pavanbsd>jps -l
9116 sun.tools.jps.Jps
8812 weblogic.Server
Filtering the weblogic instance with find command on jps will give you the desired outcome. 
?
1
2
C:\Users\pavanbsd>jps -l |find "weblogic"
8812 weblogic.Server

jps -v

this -v option is most important for tracking WebLogic, this option gives you the JVM aguments used to invoke the JAVA process (weblogic.Server). Usually for our WebLogic what we set in the setDomainEnv.sh will appear with this option. 
?
1
2
3
4
5
6
C:\Users\pavanbsd>jps -v |find "weblogic"
8812 Server -Xms256m -Xmx512m -XX:MaxPermSize=128m -Dweblogic.Name=adm_clstr_dom -Djava.security.policy=C:\Oracle\MIDDLE
~1\WLSERV~1.3\server\lib\weblogic.policy -Dweblogic.ProductionModeEnabled=true -da -Dplatform.home=C:\Oracle\MIDDLE~1\WL
SERV~1.3 -Dwls.home=C:\Oracle\MIDDLE~1\WLSERV~1.3\server -Dweblogic.home=C:\Oracle\MIDDLE~1\WLSERV~1.3\server -Dweblogic
.management.discover=true -Dwlw.iterativeDev=false -Dwlw.testConsole=false -Dwlw.logErrorsToConsole=false -Dweblogic.ext
.dirs=C:\Oracle\MIDDLE~1\patch_wls1036\profiles\default\sysext_manifest_classpath

jps -m

this -m option will gives you the Java main() programs command line arguments that used by Java process. 
?
1
2
3
C:\Users\pavanbsd>jps -m
8812 Server
8984 Jps -m

Problem of finding Java PIDs

Ofcourse you can kill the instance in the emergency in the same way this is quicker than regular ps command. Usually WLA uses following command for finding the WebLogic managed server process:
?
1
ps -fu username

Scanning that process list with your eyes for WebLogic start process, then its child process finally java process in that process list. whole process looks hectic when there is many WebLogic instances running on the same machine. Sometimes killing wrong process makes nonsense/messy. To avoid such collisions in decision of killing process best way is using 'jps'.

Try it and know about it then you can enjoy working with it...

Another problem area that will do pain for Middleware admins are that, Find is the NodeManager is running or not on a machine (Win/*nix)? best option I have is simply type 'jps' it will give the desired result. Here I found the simple way for taking thread dump with JDK tools which works on UNIX machine and also in Windows. Assuming that you WLA(WebLogic Admin) are aware of which WebLogic instance need to take Thread-dump for analysis of an issue. The best option which I use that makes very easy do so is the java process in a UNIX box is :
?
1
$ jps -lv |grep WL_instancename

This will give you the process id and long view of JAVA_OPTIONS assigned to that instance. Pick that first number (Java PID) and use your regular kill -3 on it :)

jps as Troubleshooting helper

The jps command can be used to pipe out the PID for thread-dumps and memory/heap-dumps or Generation wise footprint with the following JDK commands utilities:

  • jstat 
  • jstack
  • jhat 
  • jdb
  • jmap
  • jinfo
  • jvisualvm
  • jconsole

Count WebLogic Servers using jps


Basically while working on Produciton environments, there would be WebLogic server bounce required while doing Application release or some patching happen on some of the middleware architecture components. Sometimes you may need to know how many WebLogic instances are running in that Unix machine or how many left for bounce. Simply you can use our free 'jps' command as shown below
?
1
$jps |wc -l


If you wish to see only java process you can use simply jps command.
?
1
$jps


We can use for the WebLogic 9.x 10, 11g versions managed instances for thread dumps or terminating the process.
Note: 
1. This command is available in JDK version 1.5 onwards only.
2. Careful while using long view it shows full details.

No comments:

Post a Comment