weblogic 阻塞的线程挂起和阻塞和等待为什么这么多

据悉,该女子身体携带艾滋病毒及梅毒等传染性疾病。
当地3200人不分国籍,全数裸体并将涂成不同色调的蓝。
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
  WebLogic Server 性能调优
  任何在市场上成功的产品都拥有良好的性能。虽然成为象WebLogic Server这样广泛使用的产品需要具备很多特性,但性能绝对是必不可少的。
  良好的编程习惯在帮助应用运行方面起了很大的作用,但是仅有它们还是不够的。应用服务器必须能够在多种硬件和操作系统之间移植,必须具备通用性以便处理范围更广的应用类型。这就是为什么应用服务器都提供了丰富的调试“按钮”的原因,通过调整这些“按钮”,能够使服务器更适合运行环境以及应用程序。
  本文针对WebLogic讨论了其中的某些调试参数,不过并未将所有可调整的属性全部列出。此外,在将此处推荐的方法运用到产品环境之前,建议您先在测试环境中对它们测试一番。
  性能监控及瓶颈发现
  性能调试的第一步是孤立“危险区域”。性能瓶颈可以存在于整个系统的任一部分?D?D网络、数据库、客户端或应用服务器。重要的是首先确定哪个系统组件引起了性能问题,调试错了组件可能会使情况更糟。
  WebLogic Server为系统管理员提供了管理控制台和命令行工具两种方式监控系统性能。服务器端有叫作mbean的集合,用于搜集诸如线程消耗情况、资源剩余情况、缓存使用情况等信息。控制台和命令行管理器都可以从服务器将这些信息调用出来。图1的屏幕快照就显示了EJB容器中缓存的使用和剩余情况,这是控制台提供的性能监控的选项之一。
  代码分析器也是应用代码用以探测自身性能瓶颈的另一种有效的工具。有几个很好的代码分析器,如:Wily Introscope, Jprobe, Optimizelt。
  EJB 容器
  EJB容器中最昂贵的操作当然是数据库调用?D?D装载和存储实体bean。容器也因此提供了各种各样的参数以便减少数据库的访问次数。但不管怎样,除非是在特殊情况下,否则在每个bean的每次交易中,至少都得有一次装载操作和一次存储操作。这些特殊情况是:
  1. Bean是只读的。此时,bean只需在第一次访问时装载一次,从来不需要存储操作。当然,如果超出参数read-timeout-seconds的设置,bean将被再次装载。
  2. Bean 有专门的或积极的并发策略,且参数db-is-shared 设置为假。此参数在WebLogic Server 7.0中被重新命名为cache-between-transactions。参数db-is-shared 设置为假相当于参数cache-between-transactions设置为真。
  3. Bean在交易中未被修改过,此时,容器会将存储操作优化掉。
  如果不属于上述任何一种情况,则code path中的每个实体bean在每次交易时,至少会被装载和存储一次。有些特征能够减少数据库的调用或者降低数据库调用的开销,如:高速缓存技术、域(field)分组、并发策略以及紧密关联缓存(eager relationship caching)等,其中的某些特征是WebLogic Server 7.0新增的。
  高速缓存:实体bean缓存空间的大小由weblogic-ejb-jar.xml中的参数max-beans-in-cache定义。容器在交易中第一次装载bean时是从数据库调用的,此时bean也被放在缓存中。如果缓存的空间太小,有些bean就被滞留在数据库中。这样,如果不考虑前面提到的前两种特殊情况的话,这些bean在下次调用时就必须重新从数据库装载。从缓存调用bean也意味着此时不必调用setEntityContext()。如果bean的关键(主)键是组合域或者比较复杂,也能省却设置它们的时间。
  域分组:域分组是对于查找方法指定从数据库加载的域。如果实体bean与一个较大的BLOB域(比方说,一幅图像)相联系,且很少被访问,则可以定义一个将此域排除在外的域组,该域组与一个查找方法相关联,这样查找时,BLOB域即不会被装载。这种特征只对EJB2.0的bean 适用。
  并发策略:在WebLogic Server 7.0中,容器提供了四种并发控制机制。它们是独占式、数据库式、积极式和只读式。并发策略与交易进行时的隔离级别紧密相关。并发控制并不是真正意义上的提高性能的措施,它的主要目的是确保实体bean所表示的数据的一致性,该一致性由bean的部署器所强制要求。无论如何,某些控制机制使得容器处理请求的速度比其它的要快一些,但这种快速是以牺牲数据的一致性为代价的。
  最严格的并发策略是独占式,利用特殊主键对bean的访问是经过系列化的,因此每次只能有一个交易对bean进行访问。这虽然在容器内提供了很好的并发控制,但性能受到限制。在交易之间允许互为缓存的时候,这种方法很有用,但在集群环境中不能使用,此时,装载操作被优化掉,因此可能导致丧失并行性。
  数据库式的并发策略不同于数据库的并发控制。实体bean在容器中并未被锁定,允许多个交易对相同的实体bean并发操作,因此能够提高性能。当然,这样对隔离的级别也许要求较高,以便确保数据的一致性。
  积极式并发策略与数据库的并发控制也不同。不同之处在于对数据一致性的检查发生在对已设定的更新操作进行存储时而非在装载时将整行锁定。如果应用内对同一个bean访问的冲突不是很激烈的情况下,本策略比数据库式的策略要快一些,虽然两个提供了相同的数据一致性保护级别。但是在有冲突发生的时候,本策略要求调用者要重新发起调用。本特征也只对EJB 2.0 适用。
  只读式策略只能用于只读bean。Bean只在应用第一次访问时或者超出参数read-timeout-seconds所指定的值时才被装载。Bean从来不需要被存储。当基本数据改变时,也会通过read-mostly格式通知bean,从而引起重新装载。
  紧密关联缓存: 如果两个实体bean, bean A 和bean B 在CMR(容器关系管理)内关联,两个在同一个交易中被访问,且由同样的数据库调用装载,我们称为紧密关联缓存。这是WebLogic Server 7.0的新特征,同样只适用于EJB2.0。
  除了上面列出的通过优化容器内对数据库的访问从而达到性能增加的特征外,另有一些在容器之外,针对会话bean和实体bean的参数能够帮助提升性能。
  缓冲池和高速缓存是EJB容器为提高会话bean和实体bean性能所提供的主要特征。然而,这些方法并非对所有类型的bean适用。它们的消极面是对内存要求较高,虽然这不是主要的问题。缓冲池适用于无状态会话bean(SLSB),消息驱动bean(MDB)以及实体bean。一旦为SLSB和MDB设定了缓冲池的大小,这些bean的许多实例就会被创建并被放到缓冲池中,setSessionContext()/setMessageDriveContext()方法会被调用。为这些bean设置的缓冲池的大小不必超过所配置的执行线程数(事实上,要求比此数要小)。如果方法setSessionContext()要做任何开销昂贵的操作的话,此时JNDI查询已经完成,使用缓冲池中的实例方法调用将会加快速度。对实体bean来说,在完成setEntityContext()方法调用之后,缓冲池与bean的匿名实例相连(没有主键)。这些实例可以被查询操作所使用,查询方法从缓冲池中取出一个实例,为其指定一个主键,然后从数据库中装载相应的bean。
  高速缓存适用于有状态会话bean(SFSB)和实体bean。实体bean已经在前面讨论过。对于SFSB,缓存能够避免向硬盘串行化的操作。串行化到硬盘的操作非常昂贵,绝对应该避免。用于SFSB的缓存大小可以比连接到服务器的并发客户端数略微大些,这是由于仅当缓存被占用了85%以后,容器才会设法将bean滞留在数据库中待命。如果缓存大于实际所需,则容器不会通过缓存花费时间将bean待命。
  EJB容器提供了两种方法进行bean-to-bean 和 Web-tier-to-bean的调用操作:传值调用和传送地址调用。如果bean处在同一个应用之中,则缺省情况下,用的是传送地址的方法,这比传值要快一些。传送地址的方法一般不应被禁止,除非有充足的理由要强制这样做。强制使用传送地址的另一种做法是使用本地接口。在WebLogic Server 7.0中引入了另一个特征是对有状态服务使用激活(activation)。虽然这种做法在某种程度上影响了性能,但由于对内存要求较低,因此极大地改进了扩展性。如果扩展性不值得关注,可以将参数noObjectAction传送给ejbc从而关闭激活(activation)。
  对数据库的访问来说,调试JDBC与调试EJB容器同样重要。比方说设置连接池的大小?D?D连接池应大到足以容纳所有线程对连接的要求。如果所有对数据库的访问能够在缺省的执行队列中得以实现,则连接数应为执行队列中的线程数,比读取socket的线程(缺省执行队列中用来读取进入请求的线程)数要少。为了避免在运行期间对连接进行创建和删除,可在初始时即将连接池设置为其最大容量。如果可能的话,应确保参数TestConnectionsOnReserve被设置为假(false,这是缺省设置)。如果此参数设置为真(true),则在连接被分配给调用者之前,都要经过测试,这会额外要求与数据库的反复连接。
  另一个重要的参数是PreparedStatementCacheSize。每个连接都为宏语句设一个静态的缓存,大小由JDBC连接池配置时指定。缓存是静态的,时刻牢记这一点非常重要。这意味着如果缓存的大小是n的话,则只有放在缓存中的前n条语句得到执行。确保昂贵的SQL语句享受到缓存的方法是用一个启动类将这些语句存放到缓存中。尽管缓存技术从很大程度上改进了性能,但也不能盲目使用它。如果数据库的格式有了变化,那么在不重新启动服务器的情况下,无法使缓存中的语句失效或者是用新的进行替换。当然,缓存中的语句会使数据库中的光标得以保留。
  对于WebLogic Server 7.0来说,由于jDriver性能的改进已使其速度远远快于Oracle的?C驱动程序,尤其对于要完成大量SELECT操作的应用来说就更是如此。这可以从HP提交的利用WebLogic Server 7.0 Beta版的两份Ecperf结果得到证明(/ecperf/index.jsp?page=results/top_ten_price_performance)。
  JMS子系统提供了很多的调试参数。JMS消息是由称为JMSDispatcher的独立执行队列处理的。因此,JMS子系统既不会由于运行在缺省或者其它执行队列中的应用因争夺资源而导致“营养匮乏”,反过来也不会抢夺其它应用的资源。对JMS来说,大多数的调试参数都是在服务的质量上进行折衷处理。如,利用文件式持续性目的地(file-persistent destnation)禁止同步写操作(通过设置特性: -Dweblogic.JMSFileStore.SynchronousWritesEnabled =false)以后会引起性能急剧提高,但同时也会冒着丢失消息或者重复接收消息的风险。类似地,利用多点传送发送消息会提升性能,同时也会有消息半途丢失的危险。
  消息确认间隔不应设置得过短?D?D发送确认的比率越大,处理消息的速度可能会越慢。同时,如果设置得过大,则意味着系统发生故障时,消息会丢失或者被重复发送。
  一般说来,应在单个服务器上对多个JMS目的地进行配置,而不是将它们分散在多个JMS服务器,除非不再需要扩展。
  关闭消息页面调度(paging)可能会提高性能,但会影响可扩展性。如果打开消息页面调度(paging),则需要额外的I/O操作以便将消息串行化到硬盘,在必要的时候再读进来,但同时也降低了对内存的要求。
  一般来说,异步过程比同步过程更好操作,更易于调节。
  Web容器
  Web层在应用中更多的是用来生成表达逻辑。广泛使用的体系结构是从应用层读取数据,然后使用servlet和JSP生成动态内容,其中应用层一般由EJB组成。在这种结构中,servlet 和JSP保留对EJB的引用,以防它们与数据库或数据源直接对话。将这些引用保存起来是个不错的主意。如果JSP和servlet没有和EJB部署在同一台应用服务器上,则利用JNDI进行查询的费用是很昂贵的。
  JSP缓存标记符可以用于存储JSP页面内的数据。这些标记符都支持对缓存的输入和输出。对缓存的输出涉及到标记符内的代码所生成的内容,对缓存的输入涉及到标记符内的代码对变量的赋值。如果不希望Web层频繁变化,则可以通过将ServletReloadCheckSecs 设置为-1,从而关闭自动装载(auto-reloading)功能。使用这种方法以后,服务器将不再轮询Web层是否有变化,如果JSP和servlet的数量很多,则效果是非常明显的。
  这里也建议不要在HTTP会话中储存过多的信息。如果信息是必须的,可以考虑使用有状态会话bean来替代。
  JVM调试
  如今的大多数JVM具有自主调节功能,因为它们能够探测到代码中的危险区域并对它们进行优化。开发和部署人员能够考虑的调试参数大概就是堆设置了。设置这些并没有一般的规则。JVM一般堆空间,按新空间或保留空间一般设置为整个堆空间的三分之一或一半组织。整个堆空间不能指定得过大以致于无法支持并发的内存垃圾回收(GC)处理。在这种设置环境中,如果堆太大的话,垃圾回收的间隔应设为一分钟或更长。最后,需要引起注意的是这些设置在很大程度上依赖于部署在服务器上的应用使用内存的模式。有关调试JVM的其它信息可以参考:
  服务器调试
  除了由各个子系统提供的调试参数以外,还有适用于服务器的参数能够帮助提升性能。其中最重要的是配置线程数和执行队列数。增加线程数并非总能奏效,仅当下列情况成立时再考虑使用这种方法:预定的吞吐量没有达到;等待队列(未开始处理的请求)过长;CPU仍有剩余。当然,这样做并不一定能改善性能。CPU使用率低可能是由于对服务器的其它资源竞争所致,如,没有足够的JDBC连接。当改变线程数时应考虑到这些类似的因素。
  在WebLogic Server 7.0中,提供了配置多个执行队列的功能,并且能够在部署中定义处理特殊的EJB或JSP/servlet请求的执行队列。要做到这些,只要在运行weblogic.ejbc时将标志-dispatchPolicy &队列名称& 传送给bean 即可。对于JSP/servlet,可将设置Web应用的weblogic部署描述符中初始化参数(init-param) wl-dispatch-policy的值设为执行队列的名字即可。有时应用中的某些bean/JSP对操作的响应时间比其它的要长,此时,可以对这些bean/JSP设置单独的执行队列。至于队列的大小,要达到最好的性能,还取决于经验。
  另一个比较大的问题是决定在何种情况下应该使用WebLogic性能包(http://e-/wls/docs70/perform/WLSTuning.html - 1112119)。如果socket数不太多(每个服务器上都有一个socket用于客户端JVM的远程方法调用连接),而且总是忙于读取从客户端发送过来的请求数据,那么此时使用性能包恐怕不会有明显的改进。也有可能不用性能包会导致相似或更好的结果,这取决于JVM在处理网络I/O时的具体实现。
  Socket读取线程取自缺省执行队列。在Windows 环境下,每个CPU有两个socket读取线程,在solaris环境下,共有三个socket用于本地输入输出(native I/O)。对于Java 输入输出(I/O),读取线程数由配置文件config.xml中的参数PercentSocketReaderThreads 进行设置。它的缺省值是33%, 上限是50%,这是显而易见的,因为如果没有线程用于处理请求,则同样不会有更多的读取线程啦。对于Java I/O,应使读取线程数尽量接近客户端连接数,因为在等待请求时,Java I/O会阻塞。这也是为什么当客户端的连接数增加时,线程数不能一直同等增加的原因。
  我们上面只讨论了调试服务器的部分方法。需要记住的是,一个设计蹩脚,编写欠佳的应用,通常都不会有好的性能表现,无论对服务器及其参数如何调试。贯穿应用开发周期的各个阶段?D?D从设计到部署,性能始终应该是考虑的关键因素。经常发生的情况是性能被放在了功能之后,等到发现了问题再去修改,已经很困难了。
欢迎举报抄袭、转载、暴力色情及含有欺诈和虚假信息的不良文章。
请先登录再操作
请先登录再操作
微信扫一扫分享至朋友圈
搜狐公众平台官方账号
生活时尚&搭配博主 /生活时尚自媒体 /时尚类书籍作者
搜狐网教育频道官方账号
全球最大华文占星网站-专业研究星座命理及测算服务机构
鲁德培训,是一个创新型教育培训机构,是中国高端软件测试领域...
主演:黄晓明/陈乔恩/乔任梁/谢君豪/吕佳容/戚迹
主演:陈晓/陈妍希/张馨予/杨明娜/毛晓彤/孙耀琦
主演:陈键锋/李依晓/张迪/郑亦桐/张明明/何彦霓
主演:尚格?云顿/乔?弗拉尼甘/Bianca Bree
主演:艾斯?库珀/ 查宁?塔图姆/ 乔纳?希尔
baby14岁写真曝光
李冰冰向成龙撒娇争宠
李湘遭闺蜜曝光旧爱
美女模特教老板走秀
曝搬砖男神奇葩择偶观
柳岩被迫成赚钱工具
大屁小P虐心恋
匆匆那年大结局
乔杉遭粉丝骚扰
男闺蜜的尴尬初夜
客服热线:86-10-
客服邮箱:weblogic 阻塞的线程为什么这么多_百度知道
weblogic 阻塞的线程为什么这么多
答:Weblogic从9版本开始线程数是痛由系统自动调整..,在做压力测试的时候一个应用部署在Weblogic上,Execute Thread Total ,监控下CPU及内存的的状况
知道智能回答机器人
我是知道站内的人工智能,可高效智能地为您解答问题。很高兴为您服务。
其他类似问题
为您推荐:
weblogic的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁08:36 提问
生产环境线程阻塞dump
各位大神,帮忙分析一下异常dump,生产环境用户量增多的时候就会出现线程阻塞,导致服务器性能变慢,测试环境做压力测试没有重现,让DBA看了一下DB也没有发现异常会话、高频sql或者是性能较差的sql、数据等待等
DUMP如下:
"[STUCK] ExecuteThread: '40' for queue: 'weblogic.kernel.Default (self-tuning)'" id=54 idx=0xf0 tid=160959 prio=1 alive, in native, daemon
at jrockit/net/SocketNativeIO.readBytesPinned(Ljava/io/FileD[BIII)I(Native Method)
at jrockit/net/SocketNativeIO.socketRead(SocketNativeIO.java:32)
at java/net/SocketInputStream.socketRead0(Ljava/io/FileD[BIII)I(SocketInputStream.java)
at java/net/SocketInputStream.read(SocketInputStream.java:129)
at oracle/net/ns/Packet.receive(Packet.java:300)
at oracle/net/ns/DataPacket.receive(DataPacket.java:106)
at oracle/net/ns/NetInputStream.getNextPacket(NetInputStream.java:315)
at oracle/net/ns/NetInputStream.read(NetInputStream.java:260)
at oracle/net/ns/NetInputStream.read(NetInputStream.java:185)
at oracle/net/ns/NetInputStream.read(NetInputStream.java:102)
at oracle/jdbc/driver/T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124)
at oracle/jdbc/driver/T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80)
at oracle/jdbc/driver/T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137)
at oracle/jdbc/driver/T4CTTIfun.receive(T4CTTIfun.java:290)
at oracle/jdbc/driver/T4CTTIfun.doRPC(T4CTTIfun.java:192)
at oracle/jdbc/driver/T4C8Oall.doOALL(T4C8Oall.java:531)
at oracle/jdbc/driver/T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle/jdbc/driver/T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1044)
at oracle/jdbc/driver/OracleStatement.executeMaybeDescribe(OracleStatement.java:1199)
at oracle/jdbc/driver/OracleStatement.doExecuteWithTimeout(OracleStatement.java:1289)
at oracle/jdbc/driver/OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3593)
at oracle/jdbc/driver/OraclePreparedStatement.execute(OraclePreparedStatement.java:3694)
^-- Holding lock: oracle/jdbc/driver/T4CConnection@0x9b7c8fd0[thin lock]
at oracle/jdbc/driver/OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1378)
at weblogic/jdbc/wrapper/PreparedStatement.execute(PreparedStatement.java:99)
at com/ibatis/sqlmap/engine/execution/SqlExecutor.executeQuery(SqlExecutor.java:186)
at com/paic/pafa/app/lwc/service/persistence/dao/ibatis/PafaSqlExecutor.doSuperExecuteQuery(Lcom/ibatis/sqlmap/engine/scope/RequestSLjava/sql/CLjava/lang/S[Ljava/lang/OIILcom/ibatis/sqlmap/engine/mapping/statement/RowHandlerC)V(Unknown Source)
at com/paic/pafa/app/lwc/service/persistence/dao/ibatis/PafaSqlExecutor.executeQuery(Lcom/ibatis/sqlmap/engine/scope/RequestSLjava/sql/CLjava/lang/S[Ljava/lang/OIILcom/ibatis/sqlmap/engine/mapping/statement/RowHandlerC)V(Unknown Source)
at com/ibatis/sqlmap/engine/mapping/statement/GeneralStatement.sqlExecuteQuery(GeneralStatement.java:205)
at com/ibatis/sqlmap/engine/mapping/statement/GeneralStatement.executeQueryWithCallback(GeneralStatement.java:173)
at com/ibatis/sqlmap/engine/mapping/statement/GeneralStatement.executeQueryForObject(GeneralStatement.java:104)
at com/ibatis/sqlmap/engine/impl/SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:566)
at com/ibatis/sqlmap/engine/impl/SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:541)
at com/ibatis/sqlmap/engine/impl/SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)
at org/springframework/orm/ibatis/SqlMapClientTemplate$1.doInSqlMapClient(SqlMapClientTemplate.java:270)
at org/springframework/orm/ibatis/SqlMapClientTemplate.execute(SqlMapClientTemplate.java:200)
at org/springframework/orm/ibatis/SqlMapClientTemplate.queryForObject(SqlMapClientTemplate.java:268)
at com/paic/pa18shop/policy/biz/intergration/dao/impl/AppPolicyBaseInfoDAO.findOneApplyPolicy(AppPolicyBaseInfoDAO.java:96)
at com/paic/pa18shop/policy/biz/service/impl/AppPolicyBaseInfoService.findOneApplyPolicy(AppPolicyBaseInfoService.java:893)
at com/XXXXXXXXX/Pa18ShopServiceImpl.saveAppPolicy(Pa18ShopServiceImpl.java:228)
at com/XXXXXXXXX/TempSaveActionImpl.saveToPa18Shop(TempSaveActionImpl.java:1126)
at com/XXXXXXXXX/TempSaveActionImpl._baseInfoSave(TempSaveActionImpl.java:863)
at com/XXXXXXXXX/TempSaveActionImpl.vehicleInfoSave(TempSaveActionImpl.java:448)
at com/XXXXXXXXX/TempSaveActionImpl._newTempSave(TempSaveActionImpl.java:157)
at com/XXXXXXXXX/TempSaveActionImpl.execute(TempSaveActionImpl.java:117)
at sun/reflect/GeneratedMethodAccessor956449.invoke(Ljava/lang/O[Ljava/lang/O)Ljava/lang/O(Unknown Source)
at sun/reflect/DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java/lang/reflect/Method.invoke(Method.java:597)
at com/paic/pa18shop/core/biz/action/BaseAction.invokeMethod(BaseAction.java:93)
at com/paic/pa18shop/core/biz/action/BaseAction.perform(BaseAction.java:43)
at com/paic/pafa/app/biz/ac/impl/ApplicationControllerBean.handleRequest(Lcom/paic/pafa/app/dto/ServiceR)Lcom/paic/pafa/app/dto/ServiceR(Unknown Source)
at com/paic/pa18shop/core/biz/AppControllerBean.handleRequest(AppControllerBean.java:44)
at com/paic/pa18shop/core/biz/pafaAC_txwvep_EOImpl.__WL_invoke(Ljava/lang/O[Ljava/lang/OI)Ljava/lang/O(Unknown Source)
at weblogic/ejb/container/internal/SessionRemoteMethodInvoker.invoke(SessionRemoteMethodInvoker.java:40)
at com/paic/pa18shop/core/biz/pafaAC_txwvep_EOImpl.handleRequest(Lcom/paic/pafa/app/dto/ServiceR)Lcom/paic/pafa/app/dto/ServiceR(Unknown Source)
145关注|484收录
1084关注|145收录
414关注|937收录
其他相似问题
相关参考资料小刘变老刘 的BLOG
用户名:小刘变老刘
文章数:44
访问量:2949
注册日期:
阅读量:5863
阅读量:12276
阅读量:302630
阅读量:1021489
51CTO推荐博文
Weblogic控制台监控发现 &环境&&服务器&&你的服务器&&监控&&线程& 中活动执行线程竟然是2000多。同一套系统在另一套平台上,并且访问的人不少,也没有超过100。重启此应用,活动进程依然没有变化,真是奇怪。查看转储线程堆:&&&&&&&&&&&& ==== FULL THREAD DUMP===============&&&&&&&&& &&&&&&&&&&& Tue Aug 12 10:54:48 2014&&&&&&&&& &&&&&&&&&&& Oracle JRockit(R)R28.1.0-123-.6.0_20-0-linux-x86_64&&&&&&&&& &&&&&&&&&&& "Main Thread" id=1idx=0x4 tid=12399 prio=5 alive, waiting, native_blocked&&&&&&&&& &&&&&&&&&&&&& &&-- Waiting for notification on:weblogic/t3/srvr/T3Srvr@0xc70a6538[fat lock]&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/vm/Threads.waitForNotifySignal(JLjava/lang/O)Z(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& atjava/lang/Object.wait(J)V(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& atjava/lang/Object.wait(Object.java:485)&&&&&&&&& &&&&&&&&&&&&&&& atweblogic/t3/srvr/T3Srvr.waitForDeath(T3Srvr.java:981)&&&&&&&&& &&&&&&&&&&&&&&& ^-- Lock released whilewaiting: weblogic/t3/srvr/T3Srvr@0xc70a6538[fat lock]&&&&&&&&& &&&&&&&&&&&&&&& atweblogic/t3/srvr/T3Srvr.run(T3Srvr.java:490)&&&&&&&&& &&&&&&&&&&&&&&& atweblogic/Server.main(Server.java:71)&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& -- end of trace&&&&&&&&& &&&&&&&&&&& "(Signal Handler)" id=2idx=0x8 tid=12400 prio=5 alive, native_blocked, daemon&&&&&&&&& &&&&&&&&&&& "(OC Main Thread)" id=3idx=0xc tid=12401 prio=5 alive, native_waiting, daemon&&&&&&&&& &&&&&&&&&&& "(GC Worker Thread 1)" id=?idx=0x10 tid=12402 prio=5 alive, daemon&&&&&&&&& &&&&&&&&&&& "(GC Worker Thread 2)"id=? idx=0x14 tid=12403 prio=5 alive, daemon&&&&&&&&& &&&&&&&&&&& "(GC Worker Thread 3)"id=? idx=0x18 tid=12404 prio=5 alive, daemon&&&&&&&&& &&&&&&&&&&& "(GC Worker Thread 4)"id=? idx=0x1c tid=12405 prio=5 alive, daemon&&&&&&&&& &&&&&&&&&&& "(Code Generation Thread1)" id=4 idx=0x20 tid=12406 prio=5 alive, native_waiting, daemon&&&&&&&&& &&&&&&&&&&& "(Code Optimization Thread1)" id=5 idx=0x24 tid=12407 prio=5 alive, native_waiting, daemon&&&&&&&&& &&&&&&&&&&& "(VM Periodic Task)" id=6idx=0x28 tid=12408 prio=10 alive, native_blocked, daemon&&&&&&&&& &&&&&&&&&&& "Finalizer" id=7 idx=0x2ctid=12409 prio=8 alive, native_waiting, daemon&&&&&&&&& &&&&& &&&&&&&&&&atjrockit/memory/Finalizer.waitForFinalizees(J[Ljava/lang/O)I(NativeMethod)&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/memory/Finalizer.access$700(Finalizer.java:12)&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/memory/Finalizer$4.run(Finalizer.java:189)&&&&&&&&& &&&&&&&&&&&&&&& atjava/lang/Thread.run(Thread.java:619)&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& -- end of trace&&&&&&&&& &&&&&&&&&&& "Reference Handler" id=8idx=0x30 tid=12410 prio=10 alive, native_waiting, daemon&&&&&&&&& &&&&&&&&&&&&&&& atjava/lang/ref/Reference.waitForActivatedQueue(J)Ljava/lang/ref/R(NativeMethod)&&&&&&&&& &&&&&&&&&&&&&&& atjava/lang/ref/Reference.access$100(Reference.java:11)&&&&&&&&& && &&&&&&&&&&&&&atjava/lang/ref/Reference$ReferenceHandler.run(Reference.java:82)&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& -- end of trace&&&&&&&&& &&&&&&&&&&& "(Sensor Event Thread)"id=9 idx=0x34 tid=12411 prio=5 alive, native_blocked, daemon&&&&&&&&& &&&&&&&&&&& "VM JFR Buffer Thread"id=10 idx=0x38 tid=12412 prio=5 alive, in native, daemon&&&&&&&&& &&&&&&&&&&& "Timer-0" id=13 idx=0x3ctid=12415 prio=5 alive, waiting, native_blocked, daemon&&&&&&&&& &&&&&&&&&&&&&&& -- Waiting for notification on:java/util/TaskQueue@0xc504e198[fat lock]&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/vm/Threads.waitForNotifySignal(JLjava/lang/O)Z(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& at java/lang/Object.wait(J)V(NativeMethod)&&&&&&&&& &&&&&&&&&&&&&&& atjava/lang/Object.wait(Object.java:485)&&&&&&&&& &&&&&&&&&&&&&&& atjava/util/TimerThread.mainLoop(Timer.java:483)&&&&&&&&& &&&&&&&&&&&&&&& ^-- Lock released whilewaiting: java/util/TaskQueue@0xc504e198[fat lock]&&&&&&&&& &&&&&&&&&&&&&&& atjava/util/TimerThread.run(Timer.java:462)&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& -- end of trace&&&&&&&&& &&&&&&&&&&& "Timer-1" id=14 idx=0x40 tid=12416prio=5 alive, waiting, native_blocked, daemon&&&&&&&&& &&&&&&&&&&&&&&& -- Waiting for notification on:java/util/TaskQueue@0xc504e548[fat lock]&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/vm/Threads.waitForNotifySignal(JLjava/lang/O)Z(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& atjava/lang/Object.wait(J)V(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& atjava/util/TimerThread.mainLoop(Timer.java:509)&&&&&&&&& &&&&&&&&&&&&&&& ^-- Lock released whilewaiting: java/util/TaskQueue@0xc504e548[fat lock]&&&&&&&&&&&&&&&&&&&&&&&& atjava/util/TimerThread.run(Timer.java:462)&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& -- end of trace&&&&&&&&& &&&&&&&&&&& "[ACTIVE] ExecuteThread: '0'for queue: 'weblogic.kernel.Default (self-tuning)'" id=15 idx=0x44tid=12417 prio=5 alive, waiting, native_blocked, daemon&&&&&&&&& &&&&&&&&&&&&&&& -- Waiting for notification on:weblogic/work/ExecuteThread@0xc6e748b0[fat lock]&&&&&&&&& &&&&&&&&&&&&&&& at jrockit/vm/Threads.waitForNotifySignal(JLjava/lang/O)Z(NativeMethod)&&&&&&&&& &&&&&&&&&&&&&&& atjava/lang/Object.wait(J)V(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& atjava/lang/Object.wait(Object.java:485)&&&&&&&&& &&&&&&&&&&&&&&& atweblogic/work/ExecuteThread.waitForRequest(ExecuteThread.java:162)&&&&&&&&& &&&&&&&&&&&&&&& ^-- Lock released whilewaiting: weblogic/work/ExecuteThread@0xc6e748b0[fat lock]&&&&&&&&& &&&&&&&&&&&&&&& atweblogic/work/ExecuteThread.run(ExecuteThread.java:183)&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& -- end of trace&&&&&&&&& &&&&&&&&&&& "[ACTIVE] ExecuteThread: '1'for queue: 'weblogic.kernel.Default (self-tuning)'" id=16 idx=0x48tid=12418 prio=5 alive, waiting, native_blocked, daemon&&&&&&&&& &&&&&&&&&&&&&&& -- Waiting for notification on:weblogic/work/ExecuteThread@0xc6d42d00[fat lock]&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/vm/Threads.waitForNotifySignal(JLjava/lang/O)Z(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& atjava/lang/Object.wait(J)V(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& atjava/lang/Object.wait(Object.java:485)&&&&&&&&& &&&&&&&&&&&&&&& atweblogic/work/ExecuteThread.waitForRequest(ExecuteThread.java:162)&&&&&&&&& &&&&& &&&&&&&&&&^-- Lock released while waiting:weblogic/work/ExecuteThread@0xc6d42d00[fat lock]&&&&&&&&& &&&&&&&&&&&&&&& atweblogic/work/ExecuteThread.run(ExecuteThread.java:183)&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& -- end of trace&&&&&&&&& &&&&&&&&&&& "[ACTIVE] ExecuteThread: '2'for queue: 'weblogic.kernel.Default (self-tuning)'" id=17 idx=0x4ctid=12419 prio=5 alive, waiting, native_blocked, daemon&&&&&&&&& &&&&&&&&&&&&&&& -- Waiting for notification on:weblogic/work/ExecuteThread@0xc6e1c620[fat lock]&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/vm/Threads.waitForNotifySignal(JLjava/lang/O)Z(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& atjava/lang/Object.wait(J)V(Native Method)&&&&&&&& &&&&&&&&&&&&&&&& atjava/lang/Object.wait(Object.java:485)&&&&&&&&& &&&&&&&&&&&&&&& atweblogic/work/ExecuteThread.waitForRequest(ExecuteThread.java:162)&&&&&&&&& &&&&&&&&&&&&&&& ^-- Lock released whilewaiting: weblogic/work/ExecuteThread@0xc6e1c620[fat lock]&&&&&&&&& &&&&&&&&&&&&&&& atweblogic/work/ExecuteThread.run(ExecuteThread.java:183)&&&&&&&&& &&&&&&&&&&&&&&& atjrockit/vm/RNI.c2java(JJJJJ)V(Native Method)&&&&&&&&& &&&&&&&&&&&&&&& -- end of trace&&&&&&&&& &&&&&&&&&& …………此处省略大量重复的信息&在下对weblogic了解甚少,对java开发也是丈二和尚,身边也没有懂weblogic的人,看来只能借助网络搜索了。百度、ITpub、CSDN全试了都没有相关问题。后来加了几个weblogic的qq群,在群里发问基本也是没人管。哎,这世界怎么就没有个好心人呢?不过好心人最终还是出现了,他直接就找到了问题所在――这个问题的原因就在启动参数上。(就是啊,重新启动都不行,那十有八九是启动参数的问题啊,我这笨脑子!)造成这种情况的参数在weblogic\user_projects\domains\base_domain\bin下的setDomainEnvNaNd中的Dweblogic.threadpool.MinPoolSize。我的配置是这样的:JAVA_OPTIONS="${JAVA_OPTIONS}${JAVA_PROPERTIES} -Dwlw.iterativeDev=${iterativeDevFlag}-Dwlw.testConsole=${testConsoleFlag} -Dweblogic.threadpool.MinPoolSize=2000 -Dweblogic.threadpool.MaxPoolSize=4000-Dwlw.logErrorsToConsole=${logErrorsToConsoleFlag}"exportJAVA_OPTIONS&这里的-Dweblogic.threadpool.MinPoolSize=2000意思是默认线程池大小,这个参数设置多少合适我也不知道,具体设置于不设置有什么大的区别也不知道……额,反正是它在搞鬼。我将此参数去掉之后,重新启动,活动线程变少了。&网抄一些weblogic的知识,留作备查――――――检查线程数通过weblogic控制台可以查看线程数的统计信息。weblogic9及以上的线程是自优化的。但应该查看系统的线程最大数是否过大,如果过大,就要注意系统为什么会有这么大的压力。如下为示例截图对应中文翻译:ActiveExecute Threads:在活动的线程池内处理请求的线程个数ExecuteThread Total Count:线程池内线程的总数ExecuteThread Idle Count:池内的空闲线程数。它不包含stuck和standby的线程数。它是指等待接收新请求到来并处理的线程个数queuelength :在等待队列里的请求数,通常保留默认值 65536 ,队列长度表明了同时发来请求的最大数, 65536 个请求是个很大的数,即使达到这个最大数,也是很少见的。如果达到最大队列长度,WebLogic 会自动成倍增长队列大小,以处理额外的工作。& 注意:超过 65536 个请求预示队列中的线程有问题,不仅仅只是队列本身的长度问题,实践表明在队列中有堵塞线程或线程数不足的情况存在。hoggingthread count :线程处理一个请求时间超过一定值被视为hogging状态,如果继续处理请求超过一定时间将被视为stuck,或处理完请求后被放回线程池standbythread count :统计在standby(备用)线程池内的线程数。这些线程不需要处理当前请求被放入standby池内,当活动的线程池内需要更多线程时,这些线程将被激活。Execute Thread Total Count= Active Execute Threads+ standbythread count&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)}

我要回帖

更多关于 线程挂起和阻塞和等待 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信