`
逸清河
  • 浏览: 10874 次
社区版块
存档分类
最新评论

如何分析JAVA 线程堆栈

阅读更多
线程堆栈是个很强大的东西,可以看到进程正在运行的所有线程信息
1.1 kill -3 PID 命令
堆栈信息会打到进程的后台启动nohup.out的文件里面
1.2 jboss配置前台请求线程数:
jboss-4.2.3.GA/server/default/deploy/jboss-web.deployer/server.xml

<Connector port="17100" address="0.0.0.0"   
         maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
         emptySessionPath="true"   protocol="HTTP/1.1"
RIEncoding="utf-8" compression="on" compressionMinSize="2048"
  noCompressionUserAgents="gozilla,traviata"
  compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/xhtml+xml,application/x-javascript,application/javascript,text/xhtml"
       minSpareThreads="50" maxSpareThreads="200"    enableLookups="false" redirectPort="8443" acceptCount="100"
         connectionTimeout="20000" disableUploadTimeout="true" />
1.3 关注前台发起的线程
红色部分的线程是前台发起的线程,这个线程的最大数可以在jboss里面配置,系统压力大的时候这里的jboss前台请求的线程来不及释放来来处理新的请求,关注请求的是哪部分业务代码

"http-0.0.0.0-17100-250" daemon prio=1 tid=0x00002aaab0039270 nid=0x5485 waiting for monitor entry [0x000000006196a000..0x000000006196bca0]
at org.apache.log4j.Category.callAppenders(Category.java:201)
- waiting to lock <0x00002b21f8c70060> (a org.apache.log4j.spi.RootLogger)
at org.apache.log4j.Category.forcedLog(Category.java:388)
at org.apache.log4j.Category.info(Category.java:663)

"http-0.0.0.0-17100-249" daemon prio=1 tid=0x00002aaab0038b80 nid=0x5484 waiting for monitor entry [0x0000000063384000..0x0000000063385c20]
at org.apache.log4j.Category.callAppenders(Category.java:201)
- waiting to lock <0x00002b21f8c70060> (a org.apache.log4j.spi.RootLogger)
at org.apache.log4j.Category.forcedLog(Category.java:388)
at org.apache.log4j.Category.log(Category.java:853)
at org.apache.commons.logging.impl.Log4JLogger.info(Log4JLogger.java:193)

1.4 关注runnable状态的线程
"http-0.0.0.0-17100-185" daemon prio=1 tid=0x00002aaaada1fce0 nid=0x61a5 runnable [0x000000005b302000..0x000000005b305ea0]
~~
at com.huawei.nsm.formconfig.cache.Impl.FormConfigObjectCacheImpl.getFormsFromDB(FormConfigObjectCacheImpl.java:127)
at com.huawei.nsm.formconfig.cache.Impl.FormConfigObjectCacheImpl.flushCache(FormConfigObjectCacheImpl.java:76)
at com.huawei.nsm.formconfig.common.Form.deepClone(Form.java:212)
at com.huawei.nsm.formconfig.service.impl.FormServiceImpl.copyForm(FormServiceImpl.java:367)
at com.huawei.nsm.formconfig.action.FormAction.editForm(FormAction.java:155)

系统压力大,很大程度取决于这部分的线程在干什么,是否消耗了大量的系统资源,而且进一步关注是哪个线程是跑的业务代码的线程。

2014-02-19 XX 局点XX系统缓慢就是因为有13个编辑表单的线程在并发跑,而且都是runnable状态的

1.5 关注waiting for monitor entry
"Scheduler_Worker-27" prio=1 tid=0x00002aaac6721710 nid=0x7cad waiting for monitor entry [0x000000004e134000..0x000000004e134d20]
at java.lang.Long.valueOf(Long.java:550)
at com.huawei.nsm.formconfig.common.FormFieldStoreValue.<init>(FormFieldStoreValue.java:18)
at sun.reflect.GeneratedConstructorAccessor111.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:501)
at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:88)
at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:100)
~~
at com.huawei.nsm.workflow.service.AutoHDSapJob.executeJob(AutoHDSapJob.java:35)
at com.huawei.nsm.framework.schedule.Job.execute(Job.java:34)
at org.quartz.core.JobRunShell.run(JobRunShell.java:199)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546)

2014-03-29 XX局点XX系统无法访问可以在线程中出现14个此类线程
分析业务,此定时器应该没5分钟运行一次,发现驻留如此多的线程在堆栈中是不正常的

1.6 关注读取数据库线程
"http-0.0.0.0-17100-185" daemon prio=1 tid=0x00002aaaada1fce0 nid=0x61a5 runnable [0x000000005b302000..0x000000005b305ea0]
at oracle.jdbc.driver.PhysicalConnection.getCharBuffer(PhysicalConnection.java:7018)
at oracle.jdbc.driver.OracleStatement.prepareAccessors(OracleStatement.java:907)
at oracle.jdbc.driver.T4CTTIdcb.receiveCommon(T4CTTIdcb.java:261)
~~
- locked <0x00002ab8eda121f0> (a oracle.jdbc.driver.T4CConnection)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1203)
at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:342)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
at org.hibernate.loader.Loader.doQuery(Loader.java:674)

如果出现没有分页的查询需要从数据库load大量的数据,这类线程多卡在读取数据的过程中。
分享到:
评论

相关推荐

    IBM java线程堆栈分析工具

    总之,IBM的jca467.jar是WAS环境下进行Java线程分析的强大工具,它能够帮助开发者深入洞察应用程序的内部运行情况,有效地定位和解决多线程问题,提升系统的稳定性和性能。通过熟练掌握并运用这个工具,开发者可以在...

    输出java进程的jstack信息示例分享 通过线程堆栈信息分析java线程

    在分析Java应用程序的性能问题时,了解和分析Java线程的状态是非常关键的。线程堆栈信息可以让我们深入观察到线程的运行状况,包括线程的当前状态、调用堆栈、锁信息等。为了获取这些信息,我们可以使用jstack工具,...

    java线程堆栈分析工具jca457.jar

    java线程堆栈分析工具jca466.jar;堆内存分析工具Memory Analyzer;分析内存泄露产生的javacore文件,以便于定位blocked线程

    java dump堆栈分析工具

    java dump 堆栈 dumpAnalyzer 分析,在日常工作中,经常会遇到,系统跑着跑着就会出现性能问题,CPU居高不下。这个时候我们就需要对系统的堆栈信息进行分析。这里就介绍如何使用IBM内存检测工具(dumpAnalyzer)。

    详解Java线程堆栈

    Java线程堆栈的分析可以通过多种方式,例如使用jstack命令、VisualVM工具等。jstack命令是一个命令行工具,能够将Java应用程序的线程堆栈信息dump出来,以便进行分析。VisualVM工具是一个图形化的工具,能够实时...

    java线程分析工具TDA

    Java线程分析是Java开发中的重要环节,尤其是在处理性能优化、死锁排查或者并发问题时。TDA(Thread Dump Analyzer)是一款强大的Java线程分析工具,它能够帮助开发者深入理解应用在运行时的线程状态,包括线程的...

    imb-jca-线程堆栈.zip

    在IT领域,线程堆栈分析是排查性能问题和故障诊断的重要手段,特别是在大型企业级应用中,如Java应用程序。IBM提供了几个实用工具,如jca436和jca461,来帮助开发者和运维人员深入理解线程状态和定位问题。本篇文章...

    JAVA线程dump的分析

    在分析JAVA线程dump时,需要了解JAVA线程的编程原理和同步机制,包括线程的状态、调用堆栈和Monitor的状态。不同JAVA虚拟机的线程dump的创建方法和文件格式是不一样的,不同的JVM版本,dump信息也有差别。 在实际...

    Java堆栈分析服务器

    Java堆栈分析是Java应用程序性能调优的重要环节,特别是在服务器环境中,当CPU资源占用过高或者出现内存泄露等问题时,分析Java堆栈能够帮助我们找出问题的根源。在本例中,我们将通过一系列步骤来理解如何进行Java...

    bTrace跟踪线程堆栈

    标题 "bTrace跟踪线程堆栈" 涉及到的是在Java开发中对线程堆栈进行监控和分析的技术,主要使用了开源工具bTrace。bTrace是一款强大的、无侵入式的Java运行时代码注入工具,允许开发者在运行中的Java应用上动态添加...

    java线程分析工具.zip

    java线程分析工具(工具+使用说明) 1、生成堆栈报告1.txt ...在windows中双击运行:java线程堆栈分析工具-jca463.jar 3、拖入报告 导出1.txt到windows中,将1.txt拖入工具界面中的表格“Thread Dump List”

    JStack和Java Thread Dumps分析

    本文将详细介绍`JStack`的使用方法及其在分析Java线程堆栈中的应用。 #### 二、JStack简介 `JStack`是Java Development Kit (JDK)的一部分,用于生成正在运行的Java应用程序的线程快照。这些快照提供了关于每个...

    深入JVM剖析Java的线程堆栈

    Java的线程堆栈是Java虚拟机(JVM)中的一个重要概念,它记录了每个线程在执行时的方法调用序列。当线程执行时,它会在堆栈上分配内存来存储方法调用的信息,包括局部变量、操作数栈以及方法返回地址。理解线程堆栈...

    Java线程Dump分析工具jstack解析及使用场景

    Java线程Dump分析工具jstack是Java开发人员和运维人员常用的诊断工具,它能够帮助我们了解Java应用程序中线程的状态,以及线程的执行轨迹。本文将深入解析jstack的使用方法及其在不同场景下的应用。 jstack命令的...

    JVM 线程堆栈分析过程详解

    在我看来线程堆栈分析技术是Java EE产品支持工程师所必须掌握的一门技术。在线程堆栈中存储的信息,通常远超出你的想象,我们可以在工作中善加利用这些信息。  我的目标是分享我过去十几年来在线程分析中积累的...

    Java问题定位技术.pdf

    Java线程堆栈是虚拟机中线程(包括锁)状态的一个瞬间快照,即系统在某 个时刻所有线程的运行状态,包括每一个线程的调用堆栈, 锁的持有情况等信息。 每一种Java虚 拟机(SUN JVM、 IBM JVM、 JRokit、 GNU JVM等等)...

    Java堆栈内存分析笔记

    Java堆栈内存分析是Java编程中的重要概念,它关乎程序的性能优化和内存泄漏的预防。堆和栈是Java内存管理的两个主要区域,它们各自承担着不同的职责。本笔记将深入探讨这两个区域的工作原理以及如何进行有效的分析。...

    Java 线程图形化理解

    "Java Current.jar"这个文件很可能是一个Java应用程序,它提供了一个图形化的用户界面,用于展示和分析Java线程。打开这个JAR文件,你将能看到一个线程监视器,它可能提供了以下功能: 1. **实时线程视图**:列出...

    Java线程 学习

    ### Java线程学习知识点 #### 一、Java线程概览 - **定义与作用**:线程是在程序中独立且并发执行的路径。在Java中,线程被设计为语言的一部分,而不是作为操作系统的底层工具。每个Java程序至少包含一个主线程,在...

Global site tag (gtag.js) - Google Analytics