Linux上分析java程序的问题

通过日志看不出来的问题,可以通过看java的堆栈信息(dump文件)来看出一些端倪。

1. 找java的进程id、jdk/bin的目录

ps -ef | grep java

2. cd 到bin的目录,执行jstack命令

./jstack [pid]     需要在catalina_yyyy-MM-dd.log里面看dump信息

./jstack -l -F [pid]  强制打印栈信息,可以在console中看dump信息

参数:

-F   当’jstack [-l] pid’没有相应的时候强制打印栈信息

-l   长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.

-m 打印java和native c/c++框架的所有栈信息.

必要时,查看catalina_xxxx.log的日志

telnet 命令,查看网络情况

2016-08-03 问题: 最后定位到执行SQL时,线程BLOCK在那里不动,数据库连接池也没设置timeout,所以就一直挂在那里不动,后面的日志也打不出。最终发现,是在oracle客户端执行了一条delete语句,没有commit导致。

下面这篇文章写的可以:

http://loudou.info/blog/2014/03/01/yong-jstack-xian-cheng-ding-wei-chu-ti-yan/

上一篇:nginx--service配置


下一篇:Linux下使用java获取cpu、内存使用率