简单shell脚本实现每分钟线程快照
jstack/jmap/jinfo/jstat等java工具用的不算少了,不过都囿于堆栈线程或spring bean创建,自定义类加载器,动态代理类生成等的直接单次查看,使用上还算薄弱。最近SNMP协议应用开发中,遇到CommandResponder处理类中同步方法占用对象锁的问题,几分钟简单写了个100分钟内每分钟输出线程快照到文件中,最终分析快照文件找出了问题所在。mark下这几行的脚本。。
jstack/jmap等java工具应该有像top命令一样指定次数和时间间隔的参数?
后面再详细过下java工具的所有参数和完整使用。
简单shell脚本实现周期打印线程快照
#!/bin/bash
log_file="/home/fimas/FIMAS/jstacklogfile/mainlog"
script_name="monitorjstack.sh"
function log_echo
{
typeset log_message=$1
typeset log_date=$(date +"%Y-%m-%d %H:%M:%S")
echo "[${log_date}] [${script_name}] ${log_message}" >> $log_file
}
log_echo "start jstack thread"
for i in `seq 1 100`
do
log_echo "process num $i start"
/home/fimas/FIMAS/jdk/bin/jstack 93687 > /home/fimas/FIMAS/jstacklogfile/canclejstack$i
log_echo "process num $i end"
/bin/sleep 60
done
log_echo "end jstack thread"
命令执行
nohup sh monitorjstack.sh 2>&1 > /dev/null &