#!/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. 自动配置pom文件,构建maven项目jar包依赖关系,找到jar包运用到jmeter

    首先说下pom文件特别方便的优点: 什么是pom文件? POM(Project Object Model) 是Maven的基础. 它是一个XML文件,包含了Maven用来build项目所需要的项目配置 ...

  2. 代码: !AJAX

    http://www.cnblogs.com/cwp-bg/p/7668840.html ajax和jsonp使用总结 2017-10-17 var requestUrl="http://l ...

  3. SQL 查询数据库中包含指定字符串的相关表和相关记录

    declare @str varchar(100)set @str='我要找的' --要搜索的字符串 declare @s varchar(8000)declare tb cursor local f ...

  4. docker-compose学习

    该实践是在已经安装了docker的基础上,如果还未安装docker,请先安装docker : https://www.cnblogs.com/theRhyme/p/9813019.html docke ...

  5. 1、detail页面 /items/detail/:id

    <template> <div class="item_detail"> <van-swipe :autoplay="3000" ...

  6. Apache 修改端口号

    默认是80端口,可在httpd.conf文件中修改以下2个地方的端口号为预定的即可,例如修改为8080端口 把httpd.conf 中Listen 80 改成Listen 8080 把ServerNa ...

  7. 简单实用的分页类-python

    django自带的分页虽然挺好,但是就想自己弄个通用的 自己写了个分页的类,用的是python,   其他语言改下语法就能用了. #定义好类.class pagemanage: def __init_ ...

  8. JQuery的可见性选择器

    1. <div id="test" style="width:400px;height:200; background:#0000ff;display:block; ...

  9. as3中的embed

    actionscript3允许把外部swf直接用Embed标记嵌入到主类中(当然用UrlLoader动态加载也行) 原 作者:菩提树下的杨过出处:http://yjmyzz.cnblogs.com 关 ...

  10. oracle优化技巧及实例(总结)

    1.关于exists和in in是循环的方式,在内存中处理, exists是执行数据库查询, select tpd.personaccountid,sum(nvl(tpd.CREDIT_SUM, 0) ...