处理线上问题时,经常会需要抓取Java线程日志来判断问题。
为了方便使用,写了一个脚本帮助我们快速处理问题
#!/bin/bash
read -p "输入要查询的PID: " P
#筛选第二列等于输入的PID号
n=`ps aux | awk '$2~/^'$P'$/ {print $11}' | wc -l`
if [ $n -eq 0 ];then
echo "该PID不存在!"
exit
fi
#获取java路径替换为jstack
java="`ps aux | awk '$2~/^'$P'$/ {print $11}'`"
jstack=${java/%java/jstack}
#目录文件夹是否存在没有则创建
if [ ! -d "/opt/log" ];then
mkdir /opt/log
fi
#抓日志前清空上一次的日志
rm -rf /opt/log
while(true);
do jstack $P > /opt/log/log_`date +%Y%m%d%H%M%S`.log;
echo log_`date +%Y%m%d%H%M%S`.log;
sleep 1;
done