用jstack自动化捕抓异常java代码脚本
#!/bin/bash
date=` date +%y%m%d-%H%M`
pid=`top -bn1 |grep java | awk '{print $1 "\t" $9}' |head -1 | cut -f 1`
pidCPU=`top -bn1 |grep java | awk '{print $1 "\t" $9}' |head -1 | cut -f 2`
# java home
if test -z $JAVA_HOME #est -z $JAVA_HOME 是一个判断表达式,用于判断$JAVA_HOME的值是否为空字符串
then
JAVA_HOME='/data/services/jdk1.7.0_79/'
fi
# checking pid
if test -z "$($JAVA_HOME/bin/jps -l | cut -d '' -f 1 | grep $pid)" #jps -l可以列出本机所有java进程的pid,cut -d只切割pid这一列。
then
echo "process of $pid is not exists" #查找我们要找的进程是否存在
exit
fi
#line number
if test -z $linenum #判断linenum是否为空字符串,来定义打印多少行
then
linenum=10
fi
stackfile=stack$pid.dump #查异常代码文件
threadsfile=threads$pid.dump #线程id
# generate java stack
$JAVA_HOME/bin/jstack -l $pid >> $stackfile #用jstack把异常代码输入到参数文件$pidpid.dump里面去
ps -mp $pid -o THREAD,tid,time | sort -k2r | awk '{if ($1 !="USER" && $2 != "0.0" && $8 !="-" && $9) print "线程号:"$8 "; CPU负载:" $2;}' >threadsfile.txt #查找出满足第一列是>否为USER&&第二列是否为空值&&第八列是否为-的话就输出第八列的pid保存到threadsfile.txt文件内
ps -mp $pid -o THREAD,tid,time | sort -k2r | awk '{if ($1 !="USER" && $2 != "0.0" && $8 !="-" && $9) print $8;}' | xargs printf "%x\n" >> $threadsfile #ps -mp命令是在当前用户下>,列出pid包含的所有线程,本地id,时间,sort 的选项k2是指定第2排序的栏位,r是倒序排列,{if ($1 !="USER" && $2 != "0.0" && $8 !="-") print $8;}是满足第一列是否为USER&&第二列是否为>空值&&第八列是否为-的话就输出第八列的pid,然后打印出来并转成16进制输出到threads$pid.dump文件
tids="$(cat $threadsfile)" #设置tids变量为threads$pid.dump文件
for tid in $tids #然后循环打印出来我们要找的异常代码
do
echo "------------------------------ ThreadId (进程号为:$pid;CPU线程号十六进制为:$tid;) ------------------------------"
cat $stackfile | grep 0x$tid -A $linenum
done
参考 http://www.javatang.com
用jstack自动化捕抓异常java代码脚本的更多相关文章
- Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...
- Java中有多个异常, 如何确定捕获顺序(多个catch),先从上到下执行,判断异常的大小,如果包含捕到异常,就进入这个catch,后面的就不再执行
Java中异常的捕获顺序(多个catch)( Java代码 import java.io.IOException; public class ExceptionTryCatchTest { publi ...
- java基础之----java常见异常及代码示例
概述 java中有两种错误类型,一个是Exception,一个是Error,都在java.lang包下,一般来说程序中的try...catch捕获的是Exception类型的异常,而Error类型的错 ...
- 千万别在Java类的static块里写会抛异常的代码!
public class Demo{ static{ // 模拟会抛异常的代码 throw new RuntimeException(); } } 如果你在Java类的static块里写这样会抛异常的 ...
- java 代码执行cmd 返回值异常 (关于JAVA Project.waitfor()返回值是1)
关于JAVA Project.waitfor()返回值是1 0条评论 Project.waitfor()返回值是1,找了很久从网上没有发现关于1的说明. 这时对源代码调试了一下,发现Project ...
- 敏捷开发中高质量 Java 代码开发实践
Java 项目开发过程中,由于开发人员的经验.代码风格各不相同,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维护,需要较大的测试投入 和周期等问题. 这些问题在一个项目组初建.需 ...
- 四种java代码静态检查工具
[转载]常用 Java 静态代码分析工具的分析与比较 转载自 开源中国社区 http://www.oschina.net/question/129540_23043 1月16日厦门 OSC ...
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
提高Java代码质量的Eclipse插件之Checkstyle的使用详解 CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具.它能够自动化代 ...
- 干货 | 云智慧透视宝Java代码性能监控实现原理
这篇图文并茂,高端大气上档次,思维缜密的文章,一看就和我平时的风格不同.对了.这不是我写的,是我家高大英俊,写一手好代码,做一手好菜的男神老公的大作,曾发表于技术公号,经本人授权转载~~ 一.Java ...
随机推荐
- QTP 学习 - 检查点
- Spring MVC @SessionAttributes注解
@SessionAttributes原理 默认情况下Spring MVC将模型中的数据存储到request域中.当一个请求结束后,数据就失效了.如果要跨页面使用.那么需要使用到session.而@Se ...
- 《从零玩转python+人工智能-3》120,122节课深度优先疑问解答
深度优先(从左往右): 按照这个原则来:至于使用栈,或者队列:根据它们不同的特性:最终务必保证最终结果是原继承结构的“从左往右”:所以,如果是栈,就是右侧先入栈,左侧再入(这样左侧能先出来,遵循从左 ...
- spring学习1
1.<context:property-placeholder/> :用于从外部属性文件中获取Bean的配置 <context:property-placeholder locati ...
- 关于IE 浏览器的position居中定位的问题和 行块元素的设置问题
这两天在写页面时,遇到一些IE浏览器显示不正常的问题,主要有两个: 1. 在td 中设置span 元素水平垂直居中,在谷歌浏览器中可以正常显示,但是在IE 中却无法显示出想要的结果,即不能实现垂直水平 ...
- Controller层aop
利用@Around通知修改Controller的返回值 自定义一个注解@OperationBtn 在切入点Controller上加上自定义注解 接下来就是重点了,AspectJ写切面类,对该Contr ...
- centos 7 一键安装gitlab
# cat /etc/redhat-release CentOS release 6.5 (Final) # strings /lib64/libc.so.6 |grep GLIBC_ 首先升级 如果 ...
- python入门 -- 学习笔记2
习题11:提问 -- 接受键盘的输入 raw_input input() 和 raw_input() 有何不同? input() 函数会把你输入的东西当做 Python 代码进行处理,这么做会有安 ...
- cdnbest常见http状态码解释
cdnbest的常见状态码提示界面: 400状态码:语义有误,当前请求无法被服务器理解 网站访问报这个提示:host not found(找不到主机),这是没有同步站点信息到这个节点上,检查节点连接主 ...
- Linux进程的原理及与信号的联系
第1节 程序.进程.守护进程.僵尸进程的区别 程序.进程.守护进程.僵尸进程: 程序:c/php/java,代码文件,静态的,放在磁盘里的数据. 进程:正在内存中运行的程序,进程是动态的,会申请和使用 ...