`
langzhiwang888
  • 浏览: 182107 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

weblogic ThreadPool has stuck threads

 
阅读更多

JPDA(Java Platform Debugger Architecture)是sun推出的一套工具接口,有了这些接口,debugger、profile工具可以attach到target JVM,进而可以监控、调试我们的程序。JPDA包括三部分:JVM TI, JDI, JDWP。TI可以使用native语言,通过调用jvmti.c提供的系列库函数,实现debug工作,而JDI是TI面向Java开发人员提供的高层开发接口。TI代替了早期的DI,每个版本都做了一定的功能增强。随着JDK的发展,JPDA变得越发强大,比如thread信息检查、method调用跟踪、memory walk-through、perm内存区检查等,有了这些接口,我们完全可以自己造出类似于:jhat、jmap、jstack、jconsole这样的车子。用一句过时话来说:JPDA,很好很强大。 

  weblogic ThreadPool has stuck threads,我们通常能看到像下面这样的警告信息: 


 BEA-000337 Feb 1, 2007 11:01:05 AM EST Error WebLogicServer ExecuteThread: '14' for queue: 'weblogic.kernel.Default' has been busy for "72" seconds working on the request "connection82.session95", which is more than the configured time (StuckThreadMaxTime) of "60" seconds. 

  这样的信息只是一个提示,告诉最终用户某个执行线程执行了多长时间(只有执行时间超过StuckThread-MaxTime,默认600秒),用户可以根据这些信息,分析对应的请求执行了这么长时间是否正常,如果在预期或可以接受范围内,不用作任何干预,否则我们需要借助于thread dump分析执行时间的瓶颈。出现这样的警告信息,weblogic不会对这样的线程作任何操作(weblogic无法识别这么长的执行时间是不是用户所预期的,比如报表操作、文件传输等本身可能就很耗时),直到线程结束。线程能执行结束还好,如果是死锁呢? 这样的线程会一直被挂着,直到weblogic重启。重启对于很多生产系统而言是最后的选择,那么我们有什么方法来避免重启呢? Weblogic9以后,线程管理方面work manager代替了早期的thread pool,而且work manager提供了stuck thread的管理,比如出现几个stuck thread后,我们可以要求work manager停止应用,避免更多的线程被stuck。weblogic停止应用只是不提供服务,但还是不会影响正在执行的线程。 

  曾经不止一次的被客户问道我们能否中断这样的线程,从weblogic层面来看,这是mission impossible。现在有了TI,我们可以通过它干掉这样的线程。 

  要干掉这样的线程,首先要借助thread dump拿到线程名,我们将以线程名为filter。Thread dump信息如下: 


 "[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=6 tid=0x2b25a800 nid=0x3c0 waiting on condition [0x2e08f000..0x2e08fa14] 
  java.lang.Thread.State: TIMED_WAITING (sleeping) 
  at java.lang.Thread.sleep(Native Method) 
  ...... 

  上面这个线程的名字就是:[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)' 

  为了能正确的attach上JVM,启动的时候需要加上如下的JAVA_OPTIONS, 


-Xdebug -Xrunjdwp:transport=dt_socket,address=9191,server=y,suspend=n 

  现在我们就可以下面的方法attach到target JVM, 


 

Java代码  收藏代码
  1. private VirtualMachine connectVM(){  
  2. VirtualMachineManager vmm = Bootstrap.virtualMachineManager();  
  3. List connectors = vmm.attachingConnectors();  
  4. Connector conn = null;  
  5. AttachingConnector socketAttachingConnector = null;  
  6. /* 
  7. * host and port should be set here 
  8. */  
  9.   
  10. try{  
  11. vm = socketAttachingConnector.attach(arguments);  
  12. }catch(Exception e){  
  13. e.printStackTrace();  
  14. }  
  15. return this.vm;  
  16. }  


  有了线程名、connection,我们就可以用下面的方法去干掉挂死线程了, 

     
Java代码  收藏代码
  1. public void terminateThread(String threadPattern){  
  2.    if(vm != null){  
  3.    List threads = vm.allThreads();  
  4.    ThreadReference tr = null;  
  5.    int loop = -1;  
  6.    for(loop=0; loop   
  7.    if(tr.toString().indexOf(threadPattern) != -1){  
  8.    tr.interrupt();  
  9.    System.out.println(threadPattern + " is terminated!");  
  10.    break;  
  11.    }  
  12.    }  
  13.    if(loop == threads.size())  
  14.    System.out.println("no matched thread was found in target VM!");  
  15.    }  
  16.    }  
分享到:
评论
1 楼 killerover85 2015-10-13  
在企业项目中如何用

相关推荐

    WEBLOGIC常见性能问题及性能监控

    WEBLOGIC常见性能问题及性能监控

    weblogic监控 weblogic调优 weblogic版本区别 weblogic启动关闭脚本

    WebLogic Server是一款由Oracle公司开发的企业级Java应用服务器,它为构建、部署和管理企业级Java应用程序提供了全面的平台。本文将深入探讨WebLogic的监控、调优、不同版本之间的区别以及启动和关闭脚本的使用。 ...

    Weblogic 套件和Weblogic 标准版 Weblogic 企业版 功能对比

    在IT领域,特别是针对企业级应用服务器的选择与配置,Oracle WebLogic Server无疑占据了重要的位置。WebLogic Server作为一款高性能、可扩展的企业级Java应用服务器,提供了丰富的功能与服务,适用于构建、部署和...

    weblogic10.3.3之后版本升级至weblogic10.3.6文档.docx

    ### WebLogic 10.3.3 至 10.3.6 升级指南 #### 一、概述 本指南旨在详细介绍如何从WebLogic Server 10.3.3及其后续版本升级到10.3.6版本的具体步骤。升级过程中需要考虑的因素以及必要的准备措施也将被涵盖。 ###...

    weblogic详细安装部署手册

    ### WebLogic详细安装部署流程 #### 一、安装前准备 **1.1 JDK环境配置** - **确保JDK已安装:** 在安装WebLogic之前,必须先安装Java Development Kit (JDK)。WebLogic服务器依赖于JDK来运行。请确保安装的是与...

    eclipse的weblogic插件

    为了在Eclipse中方便地开发、调试和管理运行在WebLogic上的应用,Eclipse提供了WebLogic插件。 WebLogic插件的安装方法如描述所述,首先需要将下载的WebLogic插件压缩包解压。这个压缩包通常包含了若干个.jar文件,...

    weblogic weblogic weblogic

    WebLogic是Oracle公司的一款企业级Java应用服务器,它基于Java EE(Enterprise Edition)平台,用于构建、部署和管理分布式应用程序。WebLogic Server是许多大型企业和组织的核心组件,它提供了多种功能和服务,包括...

    weblogic10.3性能优化参数配置

    Weblogic 10.3 性能优化参数配置 Weblogic 服务器是 Oracle 公司推出的一个基于 Java 的中间件服务器,广泛应用于企业级应用系统中。为了确保 Weblogic 服务器的高性能和稳定运行,需要对其进行合理的配置和优化。...

    weblogic傻瓜式安装教程

    ### WebLogic傻瓜式安装教程详解 #### 一、前言 本文档旨在提供一个简单易懂的WebLogic安装教程,适用于初次接触WebLogic或希望快速完成安装的用户。通过本教程,您将学会如何在Linux环境下进行WebLogic的安装与...

    AIX下的Weblogic安装

    在AIX操作系统上安装Oracle WebLogic Server是一项技术性较强的任务,需要对AIX系统和WebLogic有深入的理解。本文将详细介绍在AIX环境下如何进行WebLogic的安装、配置以及启动。 首先,AIX(Advanced Interactive ...

    weblogic&java精华

    WebLogic&Java精华 weblogic&java精华java weblogic 面试题 下面是根据提供的文件信息生成的相关知识点: Java基础 1. Java 基础知识 在 Java 中,加载和启动 Servlet 后,为一个 Servlet 创建了一个还是多个...

    weblogic日常巡检,问题排查

    ### WebLogic 日常巡检与问题排查 #### 引言 WebLogic作为一款广泛使用的Java应用服务器,在企业级应用环境中扮演着重要的角色。为了确保WebLogic服务器能够稳定、高效地运行,定期进行健康检查(巡检)是非常必要...

    Linux环境Weblogic超详细安装配置文档

    Linux 环境 Weblogic 超详细安装配置文档 Weblogic 的安装 Weblogic 的安装过程可以分为两部分:Linux 下安装过程和 Windows 中安装过程。下面是 Linux 下安装过程的详细步骤: 1. 部署前准备:创建 weblogic ...

    weblogic 开机自动启动

    Weblogic 开机自动启动详解 Weblogic 作为一个流行的 Java 企业级应用服务器,通常需要在服务器启动时自动启动,以确保业务的连续性。然而,在 Windows 系统下,Weblogic 的自动启动却需要进行一些额外的配置。在这...

    WebLogic License

    WebLogic License是Oracle WebLogic Server的关键组成部分,它定义了用户可以如何使用和部署这款企业级应用服务器。在Oracle收购BEA之后,WebLogic License的管理方式发生了一些变化,旨在简化授权流程并提供更大的...

    WebLogic创建根上下文

    ### WebLogic创建根上下文知识点解析 #### 一、WebLogic服务器简介 WebLogic Server是Oracle公司提供的一个应用服务器,主要用于构建和部署企业级应用程序。它支持Java EE标准,并提供了高性能、高可用性和可伸缩性...

    weblogic设置session超时时间

    WebLogic 设置 Session 超时时间 WebLogic 是一个功能强大且流行的 Java 企业级应用服务器,支持多种方式来设置 Session 的超时时间。在本文中,我们将介绍如何在 WebLogic 中设置 Session 超时时间。 Method 1: ...

    weblogic和MyEclipse集成配置

    【WebLogic和MyEclipse集成配置详解】 WebLogic是Oracle公司的一款企业级应用服务器,而MyEclipse是一款强大的Java集成开发环境,特别适合于开发和部署Java EE应用程序。将两者集成可以方便地在MyEclipse中管理和...

    weblogic12.1.3补丁包

    WebLogic Server是Oracle公司的一款企业级Java应用服务器,它提供了用于构建、部署和管理分布式Java应用程序和服务的平台。WebLogic 12.1.3版本是该产品的一个重要更新,包含了许多性能优化、新功能以及安全修复。在...

    WebLogic Server 10 + 性能调优

    当线程运行时间超过预设的最大值(StuckThreadMaxTime,默认为600秒)时,WebLogic Server会将线程标记为STUCK,并记录警告消息。此外,需要定期进行线程转储以诊断潜在的性能问题,特别是当遇到堵塞线程时。 工作...

Global site tag (gtag.js) - Google Analytics