#!/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代码脚本的更多相关文章

  1. Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...

  2. Java中有多个异常, 如何确定捕获顺序(多个catch),先从上到下执行,判断异常的大小,如果包含捕到异常,就进入这个catch,后面的就不再执行

    Java中异常的捕获顺序(多个catch)( Java代码 import java.io.IOException; public class ExceptionTryCatchTest { publi ...

  3. java基础之----java常见异常及代码示例

    概述 java中有两种错误类型,一个是Exception,一个是Error,都在java.lang包下,一般来说程序中的try...catch捕获的是Exception类型的异常,而Error类型的错 ...

  4. 千万别在Java类的static块里写会抛异常的代码!

    public class Demo{ static{ // 模拟会抛异常的代码 throw new RuntimeException(); } } 如果你在Java类的static块里写这样会抛异常的 ...

  5. java 代码执行cmd 返回值异常 (关于JAVA Project.waitfor()返回值是1)

    关于JAVA Project.waitfor()返回值是1   0条评论 Project.waitfor()返回值是1,找了很久从网上没有发现关于1的说明. 这时对源代码调试了一下,发现Project ...

  6. 敏捷开发中高质量 Java 代码开发实践

    Java 项目开发过程中,由于开发人员的经验.代码风格各不相同,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维护,需要较大的测试投入 和周期等问题. 这些问题在一个项目组初建.需 ...

  7. 四种java代码静态检查工具

    [转载]常用 Java 静态代码分析工具的分析与比较 转载自 开源中国社区 http://www.oschina.net/question/129540_23043       1月16日厦门 OSC ...

  8. 提高Java代码质量的Eclipse插件之Checkstyle的使用详解

    提高Java代码质量的Eclipse插件之Checkstyle的使用详解 CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具.它能够自动化代 ...

  9. 干货 | 云智慧透视宝Java代码性能监控实现原理

    这篇图文并茂,高端大气上档次,思维缜密的文章,一看就和我平时的风格不同.对了.这不是我写的,是我家高大英俊,写一手好代码,做一手好菜的男神老公的大作,曾发表于技术公号,经本人授权转载~~ 一.Java ...

随机推荐

  1. toString 和new String()区别

    public class NewStringTestDemo { public static void main(String[] args) { String s = "你好"; ...

  2. Python的set集合

    set集合也用{}表示,set中的元素是不重复的.无序的,且它里面的元素必须是可hash的(int,str,tuple,bool),set是可变的. 1.使用set去重 m = [1, '] s = ...

  3. Mybatis-spring 传统dao开发

    jdbc.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?chara ...

  4. 如何使用 Visual C# .NET 处理 Excel 事件

    事件处理概述 Visual C# .NET 使用委派处理来自组件对象模型 (COM) 服务器的事件.委派是 Microsoft Visual Studio .NET 中的一个新概念.对于 COM 事件 ...

  5. 《从零玩转python+人工智能-3》网易云课堂王顺子

    #1.145——152节课25章——面向对象三大特性小案例 class Animal: def __init__(self,name,age=1): self.name = name self.age ...

  6. html css col-md-offset

    有的时候,我们不想让两个相邻的列挨在一起,这时候利用栅格系统的列偏移(offset)功能来实现,而不必再定义margin值.使用.col-md-offset-*形式的样式就可以将列偏移到右侧.例如,. ...

  7. IP路由配置之---------配置PPP

    实验设备:两台华三路由器,两台PC,一条V.35线 PPP是数据链路层的协议,链路层的协议有很多如帧中继fr等 实验一,PAP验证(是一种以明码传送用户名和密码的验证方式) 步骤一,在主验证方设置一个 ...

  8. mysql 查询结果集按照指定的字段值顺序排序

    mysql 查询结果如果不给予指定的order by ,那么mysql会按照主键顺序(innodb引擎)对结果集加以排序,那么最后的排序可能就不是你想要的排序结果. 举个例子,我要按照前端传过来的mo ...

  9. Python设计模式 - UML - 组件图(Component Diagram)

    简介 组件图又称构建图,用于显示系统各组件及各组件关系的物理视图. 组件图通常包括组件.接口.关系.端口和连接器,用来显示程序代码中相应的模块.源文件或源文件集合之间的依赖和泛化关系. 组件图中的组件 ...

  10. cacti的介绍、安装、配置、及维护

    一.cacti的介绍 Cacti 在英文中的意思是仙人掌的意思,Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具.它通过snmpget来获取数据,使用 R ...