JAVA程序运行错误分析
来源:互联网 发布:谷歌手机软件 编辑:程序博客网 时间:2024/05/17 05:59
整理这个文章是因为前段时间遇到的一个面试题,近些日子闲了下来就慢慢整理
一般来说,一个已经投入运营的大型项目出现问题的可能最多如下几种情况:
1.异常的CPU使用
1)查看CPU使用率,与目标进程的使用情况,再查看每个内核的使用情况。可以辅助定位是单个线程问题或线程池问题。
2)有时,程序在正常一段时间后,突然CPU垂直升高,那么可能与程序内的锁有关(如果锁持有的时间很短,不如试试cas+yield来实现自旋锁)
3)死锁,直接导出调用栈,寻找问题解决。
2.异常的内存
1)内存泄漏,没什么好说的,dump出堆栈查找问题
2)频繁的GC也会导致性能不足,在程序经常出现GC的情况下,就要注意了,调高新生代大小如果仍然不能解决则需要定位大量创建临时对象的代码(可以使用对象池技术来避免内存重复申请的情况)
3.某个工作线程的意外终止
1)
4.异常的IO1)查看打开文件,IO操作占用,磁盘使用率。可以使用命令 df iostat 等
2)查看是否有程序占用监听,网络使用率,可以使用命令 netstat 等
使用工具分析故障
1.jmap
jmap pid 默认查看JAVA进程中内存使用相关信息
jmap -histo pid 查看内存中活跃的实例数量
jmap -dump:format=b,file=(文件名) pid 完整导出java程序内存。完整分析分三个流程,在程序初始化完毕后执行一次 jmap -dump:format=b,file=a.bin 然后在内存占用开始出现上涨的时候执行一次,最后等达到上限后再执行一次,用JHat或者第三方工具来打开dump文件。
3.jstack或者JCONSOLE
默认 可以查看进程调用栈信息,用来分析IO超时,死锁,或者其他情况。程序出现异常必须要分析的信息,可以辅助问题的定位和排除。
jstat -gc pid gaptime 查看GC相关信息
jstat -compiler pid 查看实时编译信息
4.kill -3
同上,适用于没有安装develop工具的服务器,可以输出调用栈信息和部分GC信息
5.iftop 查看网口
查看网络出入流量与目标服务器之间的流量,可以辅助排查是否由攻击引起的
10 pstack 虚拟机堆栈
需要安装gdb,一般用于检查c/c++程序,在某些虚拟机级错误的时候。
未完,整理中。。。。。。
- JAVA程序运行错误分析
- java程序运行分析
- 从简单程序看java运行错误
- MyEclipse 不能运行java程序原因分析
- JConsole观察分析Java程序的运行
- JConsole分析JAVA程序运行状态
- JConsole观察分析Java程序的运行
- 分析java程序的运行过程
- 运行java程序产生hs_err_pid之类错误日志解决方法!
- crontab 运行 java程序 不输出错误的问题
- java初学者常见无法运行程序错误解决方案
- Android程序运行时出现java.lang.OutOfMemoryError 错误
- eclipse运行jsp程序错误---SEVERE:java.lang.IllegalStateException
- 运行Java程序时 常遇到的错误
- 安卓运行时错误java.lang.NoClassDefFoundError分析
- linux程序运行分析
- JForum程序运行分析
- JForum程序运行分析
- Single Round Match 477 Round 1 - Division I, Level Two PythTriplets
- kqueue(转)
- CReBar的使用
- Java学习之多态
- Java时区转换及时间格式
- JAVA程序运行错误分析
- Hadoop Streaming 常见错误(不断更新ing)
- 初识xcode,
- onsubmit="return check() 给form加onsubmit 验证所有表单后再提交,可以用返回false 来阻止submit提交
- LeetCode Word Break
- Linux系统结构 详解
- DCL-MYSQL
- POJ-3041-Asteroids 解题报告
- Java,JavaSE和JavaEE的区别