博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常见的Java问题排查方法
阅读量:7027 次
发布时间:2019-06-28

本文共 934 字,大约阅读时间需要 3 分钟。

 

以下是Java应用在运行时常见的一些问题,总结了运行时黑盒方式的一些排查方法,也希望看到的同学能给予补充,无论是补充碰到的问题,还是补充解决方法。

类装载的相关问题

写过Java代码的同学估计都碰到过ClassNotFoundException/NoClassDefFoundError/NoSuchMethodException(还有一个常见的ClassCastException就不在这里说了)。

当碰到ClassNotFoundException/NoClassDefFound时,如果很确定这个class应该是从哪个路径装载的,则可以去相应的路径找下是否有对应的class文件存在,例如web应用通常会在*.war(ear)/WEB-INF/lib或classes目录下,对于lib下的jar包,可通过写个小脚本jar -tvf的方式找找;

如不确定class是从哪装载的,则可以先看看日志里是否有堆栈信息,如果有的话则可以看到具体是哪个ClassLoader实现在装载class,之后则可以通过www.grepcode.com或jar包反编译(推荐一个挺好用的)看看具体是从哪装载的class;
如日志中没有,则可以用btrace来跟踪下抛出以上两个异常的堆栈信息,btrace脚本类似如下:

1

2

3

4

5

6

7

8

9

10

11

import static com.sun.btrace.BTraceUtils.*;

import com.sun.btrace.annotations.*;

@BTrace public class Trace{

@OnMethod(

clazz="java.lang.ClassNotFoundException",

method="<init>"

)

public static void traceExecute(){

jstack();

}

}

 

拿到堆栈信息后,可以继续使用上面的方法进行排查,在确认了class装载的位置后,则可将相应的class/jar加上即可。

转载于:https://www.cnblogs.com/gxpblogs/archive/2013/05/08/3067895.html

你可能感兴趣的文章
无法打开登录所请求的数据库 "ASPState"。登录失败。 用户 'NT AUTHORITY/SYSTEM' 登录失败。...
查看>>
Windows Phone开发(47):轻松调用Web Service
查看>>
ExecuteScalar的学习日志
查看>>
解决 dotNetZip 解压乱码的问题,支持ZIP分卷解压缩
查看>>
每日英语:Who Needs to Know How to Code
查看>>
oracle11g重新安装oem
查看>>
initrd映像文档的作用和制作
查看>>
Windows Phone-框架结构和启动过程
查看>>
PHP抓取网络数据的6种常见方法
查看>>
android之RatingBar控件用法
查看>>
Cocos2dx Label
查看>>
SkipFish
查看>>
我的菜单在母版页,如何更改菜单点击后的效果
查看>>
积累的VC编程小技巧之树操作
查看>>
Oracle碎碎念~1
查看>>
服务器虚拟化ESXi 5.5安装过程
查看>>
推荐部署网站
查看>>
性能测试误区
查看>>
数据库字段为日期类型时
查看>>
C/C++产生随机数
查看>>