当前位置: 首页 > news >正文

上海网站外包建设app应用开发的价位

上海网站外包建设,app应用开发的价位,免费查询网,中国空间站图片高清oracle线程阻塞本案例研究描述了在AIX 6.1和IBM Java VM 1.6上运行的Oracle Service Bus 11g遇到的线程阻塞问题的完整根本原因分析过程。 本文也是您提高线程转储分析技能的绝佳机会#xff0c;我强烈建议您学习并正确理解以下分析方法。 它还将展示正确数据收集的重要性我强烈建议您学习并正确理解以下分析方法。 它还将展示正确数据收集的重要性而不是过早的中间件Weblogic重新启动。 环境规格 Java EE服务器Oracle Service Bus 11g 操作系统AIX 6.1 JDKIBM JRE 1.6.0 64位 RDBMSOracle 10g 平台类型企业服务总线 故障排除工具 Quest Software Foglight for Java监视和警报 Java VM线程转储IBM JRE javacore格式 问题概述   从我们的Oracle Service Bus Weblogic环境中观察到主要性能下降。 Foglight代理还发送了警报表明Weblogic线程使用率显着增加。 事实的收集和验证   通常Java EE问题调查需要收集技术事实和非技术事实因此我们可以得出其他事实和/或就根本原因进行结论。 在采取纠正措施之前要对以下事实进行验证以便得出根本原因 对客户有什么影响 高 受影响平台的最近更改 是的在中断报告之前OSB控制台中的一些业务服务的日志记录级别已更改 受影响平台最近的流量增加了吗 没有 从多久以来观察到此问题 日志记录级别更改后观察到新问题 重新启动Weblogic服务器是否可以解决问题 是 结论1 先前在某些OSB业务服务上应用的日志记录级别更改似乎触发了此线程阻塞问题。 但是此时的根本原因仍然未知。 Weblogic线程监视Foglight for Java   Foglight for Java 来自Quest Software是一款出色的监视工具可让您完全监视任何Java EE环境以及完整的警报功能。 该工具在我们的生产环境中用于监视每个Oracle Service Bus受管服务器的中间件Weblogic数据包括线程。 您可以在下面看到线程的持续增加以及未决的请求队列。 供您参考Weblogic运行缓慢的线程被标识为“正在运行的线程”如果运行几分钟根据您配置的阈值最终可以提升为“ STUCK”状态。 现在您下一步应该采取什么行动 Weblogic重新启动 绝对不是……针对此类问题的第一个“React”是捕获JVM线程转储。 此类数据对于您执行正确的根本原因分析并了解潜在的悬挂状况至关重要。 捕获到此类数据后您就可以继续执行Weblogic服务器恢复操作例如重新启动完全托管服务器JVM。 线程卡住线程转储可以救援   此中断场景中的下一个操作步骤是在尝试恢复受影响的Weblogic实例之前从IBM JVM快速生成一些线程转储快照。 使用kill -3 Java PID生成了线程转储该脚本确实在Weblogic域的根目录生成了一些javacore文件。 javacore.20120610.122028.15149052.0001.txt 一旦生产环境备份并开始运行团队将按照以下步骤Swift进行捕获的线程转储文件的分析。 线程转储分析步骤1 –确定线程执行模式   第一步是快速遍历所有Weblogic线程并尝试确定常见的问题模式例如从远程外部系统等待的线程处于死锁状态的线程从其他线程等待以完成其任务的线程等。 分析确实Swift揭示出许多线程处于与以下相同的阻塞情况中。 在此示例中我们可以在TransactionManager Java类OSB内核代码中看到处于阻塞状态的Oracle Service Bus线程。 [ACTIVE] ExecuteThread: 292 for queue: weblogic.kernel.Default (self-tuning)J9VMThread:0x0000000139B76B00, j9thread_t:0x000000013971C9A0,java/lang/Thread:0x07000000F9D80630, state:B, prio5(native thread ID:0x2C700D1, native priority:0x5, native policy:UNKNOWN)Java callstack:at com/bea/wli/config/transaction/TransactionManager._beginTransaction(TransactionManager.java:547(Compiled Code))at com/bea/wli/config/transaction/TransactionManager.beginTransaction(TransactionManager.java:409(Compiled Code))at com/bea/wli/config/derivedcache/DerivedResourceManager.getDerivedValueInfo(DerivedResourceManager.java:339(Compiled Code))at com/bea/wli/config/derivedcache/DerivedResourceManager.get(DerivedResourceManager.java:386(Compiled Code))at com/bea/wli/sb/resources/cache/DefaultDerivedTypeDef.getDerivedValue(DefaultDerivedTypeDef.java:106(Compiled Code))at com/bea/wli/sb/pipeline/RouterRuntimeCache.getRuntime(RouterRuntimeCache.java(Compiled Code))at com/bea/wli/sb/pipeline/RouterManager.getRouterRuntime(RouterManager.java:640(Compiled Code))at com/bea/wli/sb/pipeline/RouterContext.getInstance(RouterContext.java:172(Compiled Code))at com/bea/wli/sb/pipeline/RouterManager.processMessage(RouterManager.java:579(Compiled Code))at com/bea/wli/sb/transports/TransportManagerImpl.receiveMessage(TransportManagerImpl.java:375(Compiled Code))at com/bea/wli/sb/transports/local/LocalMessageContext$1.run(LocalMessageContext.java:179(Compiled Code))at weblogic/security/acl/internal/AuthenticatedSubject.doAs(AuthenticatedSubject.java:363(Compiled Code))at weblogic/security/service/SecurityManager.runAs(SecurityManager.java:146(Compiled Code))at weblogic/security/Security.runAs(Security.java:61(Compiled Code))at com/bea/wli/sb/transports/local/LocalMessageContext.send(LocalMessageContext.java:144(Compiled Code))at com/bea/wli/sb/transports/local/LocalTransportProvider.sendMessageAsync(LocalTransportProvider.java:322(Compiled Code))at sun/reflect/GeneratedMethodAccessor980.invoke(Bytecode PC:58(Compiled Code))at sun/reflect/DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37(Compiled Code))at java/lang/reflect/Method.invoke(Method.java:589(Compiled Code))at com/bea/wli/sb/transports/Util$1.invoke(Util.java:83(Compiled Code))at $Proxy111.sendMessageAsync(Bytecode PC:26(Compiled Code)) …………………………… 线程转储分析步骤2 –检查被阻塞的线程链   下一步是检查涉及我们确定的模式的受影响和受阻的线程链。 正如我们在线程转储分析的第4部分中所看到的那样IBM JVM线程转储格式包含一个单独的部分该部分提供了所有线程阻塞链的完整细分例如Java对象监视器池锁。 快速分析确实揭示了以下线程元凶。 如您所见Weblogic线程16是实际的罪魁祸首有300多个线程正在等待获取共享对象监视器TransactionManager 0x0700000001A51610 / 0x0700000001A51628上的锁。 2LKMONINUSE sys_mon_t:0x000000012CCE2688 infl_mon_t: 0x000000012CCE26C8: 3LKMONOBJECT com/bea/wli/config/transaction/TransactionManager0x0700000001A51610/0x0700000001A51628: Flat locked by [ACTIVE] ExecuteThread: 16 for queue: weblogic.kernel.Default (self-tuning) (0x000000012CA3C800), entry count 1 3LKWAITERQ Waiting to enter: 3LKWAITER [STUCK] ExecuteThread: 0 for queue: weblogic.kernel.Default (self-tuning) (0x000000011C785C00) 3LKWAITER [STUCK] ExecuteThread: 1 for queue: weblogic.kernel.Default (self-tuning) (0x000000011CA93200) 3LKWAITER [STUCK] ExecuteThread: 2 for queue: weblogic.kernel.Default (self-tuning) (0x000000011B3F2B00) 3LKWAITER [STUCK] ExecuteThread: 3 for queue: weblogic.kernel.Default (self-tuning) (0x000000011619B300) 3LKWAITER [STUCK] ExecuteThread: 4 for queue: weblogic.kernel.Default (self-tuning) (0x000000012CBE8000) 3LKWAITER [STUCK] ExecuteThread: 21 for queue: weblogic.kernel.Default (self-tuning) (0x000000012BE91200) .................. 线程转储分析步骤3 –线程元凶更深入的分析   一旦确定了罪魁祸首下一步就是对该线程当前正在执行的计算任务进行更深入的审查。 只需返回原始线程转储数据并从下至上开始分析罪魁祸首线程堆栈跟踪。 正如您在下面看到的那样针对我们的问题案例的线程堆栈跟踪非常清楚。 它确实表明线程16当前正在尝试提交在Weblogic / Oracle Service Bus级别进行的更改。 问题在于提交操作正在挂起并且花费了太多时间导致线程16保留来自TransactionManager的共享对象监视器锁定的时间太长并使其他Oracle Service Bus Weblogic线程“饥饿”。 [ACTIVE] ExecuteThread: 16 for queue: weblogic.kernel.Default (self-tuning) J9VMThread:0x000000012CA3C800, j9thread_t:0x000000012C9F0F40, java/lang/Thread:0x0700000026FCE120, state:P, prio5 (native thread ID:0x35B0097, native priority:0x5, native policy:UNKNOWN)Java callstack:at sun/misc/Unsafe.park(Native Method)at java/util/concurrent/locks/LockSupport.park(LockSupport.java:184(Compiled Code))at java/util/concurrent/locks/AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:822)at java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:853(Compiled Code))at java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1189(Compiled Code))at java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock.lock(ReentrantReadWriteLock.java:911(Compiled Code))at com/bea/wli/config/derivedcache/DerivedCache$Purger.changesCommitted(DerivedCache.java:80)at com/bea/wli/config/impl/ResourceListenerNotifier.afterEnd(ResourceListenerNotifier.java:120)at com/bea/wli/config/transaction/TransactionListenerWrapper.afterEnd(TransactionListenerWrapper.java:90)at com/bea/wli/config/transaction/TransactionManager.notifyAfterEnd(TransactionManager.java:1154(Compiled Code))at com/bea/wli/config/transaction/TransactionManager.commit(TransactionManager.java:1519(Compiled Code))at com/bea/wli/config/transaction/TransactionManager._endTransaction(TransactionManager.java:842(Compiled Code))at com/bea/wli/config/transaction/TransactionManager.endTransaction(TransactionManager.java:783(Compiled Code))at com/bea/wli/config/deployment/server/ServerDeploymentReceiver$2.run(ServerDeploymentReceiver.java:275)at weblogic/security/acl/internal/AuthenticatedSubject.doAs(AuthenticatedSubject.java:321(Compiled Code))at weblogic/security/service/SecurityManager.runAs(SecurityManager.java:120(Compiled Code))at com/bea/wli/config/deployment/server/ServerDeploymentReceiver.commit(ServerDeploymentReceiver.java:260)at weblogic/deploy/service/internal/targetserver/DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195)at weblogic/deploy/service/internal/targetserver/DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13)at weblogic/deploy/service/internal/targetserver/DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68)at weblogic/work/SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528(Compiled Code))at weblogic/work/ExecuteThread.execute(ExecuteThread.java:203(Compiled Code))at weblogic/work/ExecuteThread.run(ExecuteThread.java:171(Compiled Code)) 根本原因连接点   在这一点上事实和线程转储分析的收集确实使我们能够确定事件链如下 生产Oracle Service Bus管理员应用的日志记录级别更改 Weblogic部署线程16无法正确提交更改 执行客户端请求的Weblogic运行时线程Swift开始排队并等待共享库监视器TransactionManager上的锁定 Weblogic实例的线程不足生成警报并迫使生产支持团队关闭并重新启动受影响的JVM进程 我们的团队计划不久后开放一个Oracle SR以共享此OSB部署行为以及客户端请求线程和OSB日志记录层之间的硬依赖性。 在此期间除非另行通知否则不会在维护时段内尝试更改OSB日志记录级别。 结论   我希望本文能帮助您了解和理解强大的线程转储分析功能以查明阻塞线程问题的根本原因以及任何Java EE生产支持团队捕获此类重要数据以防止将来再次发生的重要性。 请不要犹豫发表任何评论或问题。 参考 Oracle Service Bus –我们JCG合作伙伴 Pierre-Hugues Charbonneau的“ 阻塞线程”案例研究 位于Java EE支持模式和Java教程博客。 翻译自: https://www.javacodegeeks.com/2012/08/oracle-service-bus-stuck-thread-case.htmloracle线程阻塞
http://www.pierceye.com/news/727598/

相关文章:

  • 江门seo网站推广做网站营销怎么去推广
  • 厦门网站建设系统深圳网站建设骏域网站建设
  • 工商网站备案查询建设新农村网站
  • 建筑网站资料排行榜移动互联网的概念是什么
  • 浙江省建设诚信系统网站网上购物哪个网站最好
  • 做网站电销和生活爱辽宁下载安装
  • 安监网站安全建设信息wordpress电影影视主题
  • 网站打不开服务器错误网站怎么设置支付
  • 做网站的宽度为多少云南省建设工程信息服务平台
  • 网站优化公司大家好桂林网络搭建
  • 做a漫画在线观看网站网站建设这个工作怎么样
  • 商城网站建设缺点培训机构退费
  • 大型网站需要什么样的团队建购物网站 教程
  • 商业设计网站推荐网站注册免费qq
  • 做微信首图的网站阿里网站建设App开发
  • .网站链接策略网页制作手机版
  • 河南网站优化要多少钱网站技术有哪些
  • 域名还在备案可以做网站吗高端设计公司名字大全
  • 简洁的门户网站网站开发文案
  • 信息网站 模板中国建设银行手机银行下载官方网站
  • 番禺网站开发设计小程序后端数据库搭建
  • 丰都集团网站建设云南网站开发公司
  • 赶集网的二级域名网站怎么做海南网站建设报价方案
  • dede做手机网站网站开发小作业
  • 网站建设推广ppt室内设计知名网站
  • asp 网站源码网站搭建好了怎么上到服务器
  • 网站有什么到期wordpress怎么编辑保存
  • 服务器添加网站300500启迪设计
  • 上海市建设安全协会网站移动端页面
  • 手机做网站公司成都住房和城乡建设厅官网