地址:http://www.blogjava.net/zhugf000/archive/2007/05/16/22890.html
JVM Thread DUMP 基本功
Windows 下用Ctrl-Break,Unix 下用 kill -3 <pid> 的命令让JVM输出 thread dump。
每隔几秒 thread dump 一次,多做几次,分析比较。
Thread Dump分析的一些经验
1 找出这几次Thread dump 文件中,有哪些 Java Thread 处于长时间等待状态,很有可能就是问题之所在。
2 如果Java 线程等在某些不可能出错的地方,如 java.lang.XXX/java.util.XXX对象的某个方法,则很有可能是因为出现了 OutOfMemoryError 异常,原因不外乎是JVM 堆内存过小或出现内存泄漏。
3 对于死锁,最直接的表现就是至少两个线程长时间等待相互持有的对象(每个线程所持有的对象和它当前等待的对象都可以从 dump 中看到)。
4 对于死循环,要辅助CPU占用率确定;如果发现CPU至少一颗使用率为100%,并且有线程长时间位于用户代码处,则很有可能是死循环引起。
多线程缺陷排查
对于Java死锁问题很少出现,多线程访问变量时冲突很常见。
一般出在多线程共享同一对象实例如全局Map,Servlet,Interceptor,或如多线程同时访问某个静态方法,而此静态方法不巧又访问另一个静态变量。
这类问题自测发现不了,在并发压力测试时才能发现。如果代码的入口检查做得好,多半会抛出一些莫名其妙的异常;要不然就会出现正常运行但数据库记录不对的情况。
对这种问题,并无多好的办法解决,主要还是靠看异常堆栈和静态代码分析来解决。
内存泄漏排查
一般用商用辅助工具排查,但有可能出现在JVM heap dump 模式下,运行极度缓慢的情况。
笨笨曾经用过一个非常简单的工具,效果不错,它可以做到在不影响jvm 执行速度的情况下,做heap dump,然后对dump出的文件进行排序,检查即可。
分享到:
相关推荐
锁定排序<br>3.6 线程优先级<br>3.7 监控程序线程<br>3.8 在应用程序中加入线程<br>3.9 线程控制<br>3.9.1 线程启动<br>3.9.2 线程休眠<br>3.9.3 线程挂起<br>3.9.4 线程恢复<br>3.9.5 线程停止<br>3.9.6...
10<br/><br/>关于多线程的一些细节... 23<br/><br/>用VC++5.0 实 现 多 线 程 的 调 度 和 处 理... 25<br/><br/>一 多 任 务, 多 进 程 和 多 线 程... 25<br/><br/>二 基 于MFC 的 多 线 程 编 程... 26<br/><br...
<br>第七讲 多线程 <br> <br>第八讲 图形用户界面与事件处理<br> <br>第九讲 Java Applet<br> <br>第十讲 网络通信 <br> <br>第十一讲 J2EE <br>JDBC<br>J2EE简介<br>Servlet<br>JSP<br>Java Beans<br>EJB<br>Web ...
这些谜题涵盖了从基本语法到高级特性的各种主题,包括但不限于类型转换、对象引用、内存管理、多线程、异常处理、集合框架以及Java的API使用等。 1. 类型转换:Java是一种静态类型语言,但类型转换时可能出现问题,...
译 者 序<br><br><br><br> Java是Sun公司推出的新型面向对象程序设计语言。它将面向对象、平台无关性、稳固性、安全性、多线程等诸多特性集于一身,为用户...<br><br><br><br> 译 者<br><br><br><br> 2000年5月<br><br>
在Java编程中,多线程处理是提升程序性能和效率的重要手段,特别是在处理大量数据库数据时。本主题将深入探讨如何使用Java的并发包(java.util.concurrent)来实现多线程对数据库数据的批量处理,包括增、删、改等...
opencv3和opencv4多线程内存泄漏问题:以cv::resize函数测试结果为例。 使用中可修复或者可避免内存泄漏:1)使用opencv2的版本;2)在代码中设置修复该问题.
本文介绍了在Java多线程环境下减少内存占用量的一些关键策略,包括线程生命周期管理、对象生命周期设计、同步机制选择、线程池的使用和线程数量控制。同时,代码的异常处理和JVM参数调优也是提升多线程应用性能的...
<br>课程概述<br>本课程主要包括以下内容:<br>- Java编程语言句法<br>- 应用于Java编程语言的面向对象的概念<br>- 图形用户界面(GUI)编程<br>- 创建Applet<br>- 多线程<br>- 网络<br>本课程首先讨论了Java运行...
249<br>31.4 数据结构 250<br>31.5 加密套件 251<br>31.6 密钥信息 252<br>31.7 SESSION 252<br>31.8 多线程支持 253<br>31.9 编程示例 253<br>31.10 函数 264<br>第三十二章 Openssl命令 267<br>32.1概述 267<br>...
通过`jstat -gc <pid> <interval> <count>`,我们可以定期获取JVM的垃圾回收状况,这对于优化内存配置和识别潜在的内存泄漏问题非常有帮助。 总的来说,这些工具为Java开发者提供了一套全面的诊断和监控手段,能够...
<br><br><br>各模块概述<br>- 模块1──起步<br>- 模块2──标识符、关键字和类型<br>- 模块3──表达式和流程控制<br>- 模块4──数组<br>- 模块5──对象和类<br>- 模块6──高级语言特性<br>- 模块7──异常<br>-...
Java 程序编码规范.doc<br>Java的文件与磁盘操作.doc<br>Java多线程编程详解.doc<br>Java远程方法调用.doc<br>Java中的时间操作.doc<br>深入理解abstract class和interface.doc<br>……
chap09-多线程<br>├─D00-多线程<br>├─Windows多线程编程技术与实例<br>...<br>...<br>├─多线程,多接收模式串口类<br>├─多线程文件传输<br>├─多线程的日志记录DLL<br>├─多线程端口扫描程序<br>├─多...
4. **堆内存统计**:`jmap -finalizerinfo <pid>`可以查看等待Finalizer线程处理的对象,这有时是内存泄漏的一个迹象。 当获得heap dump文件后,我们通常会使用Eclipse Memory Analysis Tools (MAT)这样的专业工具...
chap09-多线程<br>├─D00-多线程<br>├─Windows多线程编程技术与实例<br>...<br>...<br>├─多线程,多接收模式串口类<br>├─多线程文件传输<br>├─多线程的日志记录DLL<br>├─多线程端口扫描程序<br>├─多...
3. 避免在多线程环境中直接修改List<T>:尽量减少在多线程环境中的修改操作,改为在单线程或使用线程同步后再进行修改。 4. 使用CopyTo()方法:如果只需要读取List<T>,可以先将List<T>复制到一个新的数组,然后在...
在Java编程中,多线程和异步调用是提高应用程序性能和响应能力的重要手段。在本实例中,我们将深入探讨如何使用Java实现多线程以实现异步调用,并理解其背后的机制。 首先,多线程允许一个程序同时执行多个任务。在...
在Java编程中,多线程查询数据库是一种常见的优化策略,特别是在处理大数据量或者需要并行执行多个查询时。本文将详细探讨如何利用Java的多线程技术和线程池来实现并发查询数据库,以及相关的文件`BatchDataUtil....