The first regular capture of server JVM information #! /Bin/sh # get_current_timeexportJAVA_HOME/opt/jdk1.6.0 _ 10/exportPATH $ JAVA_HOME/bin: $ PATHexportCLASSPATH.: $ JAVA_HOME/lib/tools. jar: $ JAVA_HOME/li
The first regular capture of server JVM-related information
#! /Bin/sh # get_current_time export JAVA_HOME =/opt/jdk1.6.0 _ 10/export PATH = $ JAVA_HOME/bin: $ PATH export CLASSPATH =.: $ JAVA_HOME/lib/tools. jar: $ JAVA_HOME/lib/dt. jar: $ CLASSPATH date = 'date "+ % Y-% m-% d-% H: % M: % S "'root ="/data/dxm/"jmapends = $ Root $ date" _jmap.txt "jstackends = $ Root $ date" _jstack.txt "jstateends = $ Root $ date" _jstate.txt" # start to register the jmap message echo "start to register the jmap to" $ jmapends jmap-histo: live 'jps | grep Resin | awk 'NR = 1' | awk '{print $1} ''> $ jmapends sleep 2 # start to register the jtack message echo" start register the jstack to "$ jstackends jstack-l 'jps | grep Resin | awk 'NR = 1' | awk '{print $1}''> $ jstackends sleep 2 # start to register the jstate message echo "start to register the jstate message to" $ jstateends jstat-gcutil-t-h20 'jps | grep Resin | awk 'NR = 1' | awk' {print $1} ''1000 20> $ jstateends
This allows you to run a timer:
Crontab-e
*/10 * sh/timer. sh # capture every 10 minutes
The second script: the above script is improved. the JVM information is printed only when the system load reaches the specified value.
Java code
#! /Bin/sh function printJVMMessage () {# get_current_time export JAVA_HOME =/opt/jdk1.6.0 _ 10/export PATH = $ JAVA_HOME/bin: $ PATH export CLASSPATH =.: $ JAVA_HOME/lib/tools. jar: $ JAVA_HOME/lib/dt. jar: $ CLASSPATH # only the system load greate than 1 * 8PU then start to print the gc details date = 'date "+ % Y-% m-% d-% H: % M: % S "'root ="/data/dxm/"jmapends = $ Root $ date" _jmap.txt "jstackends = $ Root $ date" _jstack.txt "jstateends = $ Root $ date" _jstate.txt" # start to register the jmap message echo "start to register the jmap to" $ jmapends jmap-histo: live 'jps | grep Resin | awk 'NR = 1' | awk '{print $1} ''> $ jmapends sleep 2 # start to register the jtack message echo" start register the jstack to "$ jstackends jstack-l 'jps | grep Resin | awk 'NR = 1' | awk '{print $1}''> $ jstackends sleep 2 # start to register the jstate message echo "start to register the jstate message to" $ jstateends jstat-gcutil-t-h20 'jps | grep Resin | awk 'NR = 1' | awk' {print $1} ''1000 20> $ jstateends} # System Max Load Per CPU, when the SystemLoad reached the MAX_LOAD * CPU_NUMBER then start register the jvm message MAX_LOAD = 1 CPU_NUMBER = 'cat/proc/cpuinfo | grep processor | wc-L'TOTAL_LOAD_TO_WARN= $ ($ MAX_LOAD * $ CPU_NUMBER) # TOTAL_LOAD_TO_WARN = 1 CURRENT_SYSTEM_LOAD = 'uptime | awk' {print $ (NF-2)} '| sed's /, // ''start_time = 'date "+ % Y-% m-% d-% H: % M: % S" 'echo 'start to print the jvm message... currenttime is: '$ Start_Time echo 'Current system load is' $ CURRENT_SYSTEM_LOAD 'and response is' $ TOTAL_LOAD_TO_WARN if [$ (echo "$ CURRENT_SYSTEM_LOAD> $ TOTAL_LOAD_TO_WARN" | bc) = 1]; then echo 'printint the jvm message... 'printjvmmessage fi Finish_Time = 'date "+ % Y-% m-% d-% H: % M: % S" 'echo 'finish to print the jvm message... and current time is: '$ Finish_Time
#! /Bin/sh function printJVMMessage () {# get_current_timeexport JAVA_HOME =/opt/jdk1.6.0 _ 10/export PATH = $ JAVA_HOME/bin: $ PATH export CLASSPATH =.: $ JAVA_HOME/lib/tools. jar: $ JAVA_HOME/lib/dt. jar: $ CLASSPATH # only the system load greate than 1 * 8PU then start to print the gc details date = 'date "+ % Y-% m-% d-% H: % M: % S "'root ="/data/dxm/"jmapends = $ Root $ date" _jmap.txt "jstackends = $ Root $ date" _jstack.txt "jstateends = $ Root $ date" _jstate.txt" # start to register the jmap message echo "start to register the jmap to" $ jmapends jmap-histo: live 'jps | grep Resin | awk 'NR = 1' | awk '{print $1} ''> $ jmapends sleep 2 # start to register the jtack message echo" start register the jstack to "$ jstackends jstack-l 'jps | grep Resin | awk 'NR = 1' | awk '{print $1}''> $ jstackendssleep 2 # start register the jstate message echo "start to register the jstate message to" $ jstateends jstat-gcutil-t-h20 'jps | grep Resin | awk 'NR = 1' | awk '{ print $1} ''1000 20> $ jstateends} # System Max Load Per CPU, when the SystemLoad reached the MAX_LOAD * CPU_NUMBER then start register the jvm message MAX_LOAD = 1CPU_NUMBER = 'cat/proc/cpuinfo | grep processor | wc-l 'total_load_to_warn = $ ($ MAX_LOAD * $ CPU_NUMBER )) # TOTAL_LOAD_TO_WARN = 1 CURRENT_SYSTEM_LOAD = 'uptime | awk' {print $ (NF-2)} '| sed's /, // ''start_time = 'date "+ % Y-% m-% d-% H: % M: % S" 'echo 'start to print the jvm message... currenttime is: '$ Start_Time echo 'Current system load is' $ CURRENT_SYSTEM_LOAD 'and response is' $ TOTAL_LOAD_TO_WARN if [$ (echo "$ CURRENT_SYSTEM_LOAD> $ TOTAL_LOAD_TO_WARN" | bc) = 1]; then echo 'printint the jvm message... 'printjvmmessagefi Finish_Time = 'date "+ % Y-% m-% d-% H: % M: % S" 'echo 'finish to print the jvm message... and current time is: '$ Finish_Time
The third script: compare whether the jar packages in the two versions are the same (with changes ):
#! /Bin/sh # compare the lib files's md5 int file1 with those in file2 # if it only exist in file1 or one lib file's md5 is not equal I # with the other then print it to the log.txt LibPath1 = $1LibPath2 = $2 date = 'date "+ % Y-% m-% d-% H: % M: % S "'log = $ date" _log.txt "echo" ----------- LOG file "$ log echo LibPath1: $ LibPath1 echo LibPath2: $ LibPath2echo LibPath1: $ LibPath1 \ n >$ LOG echo LibPath2: $ LibPath2 \ n >> $ LOGecho >>$ LOGecho >> LOG for File in 'ls-f $ LibPath1 | grep jar '; do MD5 = 'md5sum $1 $ File | awk 'NR = 1' | awk '{print $1} ''File2 = $ LibPath2 $ File # echo" File2 --------------- "$ file2 # if the same lib file exist if [! -F "$ File2"]; then echo $ File only exist LibPath1 echo $ File only exist LibPath1 \ n >>$ LOG echo >>$ LOG # if the same file exist in directory2 else MD52 = 'md5sum $ File2 | awk 'NR = 1' | awk '{print $1} ''if [" $ MD5 "! = "$ MD52"]; then echo the $ File changed \ n> $ LOG echo the $ File changed fi done where the File is md5compare. to run sh, run the following command :. /md5compare. sh libpath1 libpath2 note libpath1, libpath2 must end with "/" For example:/opt/ROOT_2011-09-08-09: 57: 26/WEB-INF/lib/instead of/opt/ROOT_2011-09-08-09: 57: 26/WEB-INF/lib]
Author: "sky-Peng"