0

最近、 SunOS 5.10 Generic_144488-17 sun4v sparc SUNW,Sun-Blade-T6340マシンで Java 7 update 7 を update 25 に更新しました。更新直後、WebLogic 11g にデプロイされたアプリケーションで深刻なパフォーマンスの問題が発生しました。

スレッド ダンプの分析中に、次のコードがアプリケーションを停止させるスレッド ダンプを引き起こしていることがわかりました。このコードは 30 秒ごとに実行されます。

import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;

ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
ThreadInfo[] allThreadsList = threadBean.getThreadInfo(threadBean.getAllThreadIds(), isObjectMonitorUsageSupported, isSynchronizerUsageSupported);

スレッド ダンプ:

at sun.management.ThreadImpl.dumpThreads0(Native Method)
at sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:440)

at sun.reflect.GeneratedMethodAccessor620.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:75)
at sun.reflect.GeneratedMethodAccessor265.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:279)
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112)
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46)
at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)
at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138)
at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$16.run(WLSMBeanServerInterceptorBase.java:449)
at java.security.AccessController.doPrivileged(Native Method)
at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.invoke(WLSMBeanServerInterceptorBase.java:447)
at weblogic.management.mbeanservers.internal.JMXContextInterceptor.invoke(JMXContextInterceptor.java:263)
at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$16.run(WLSMBeanServerInterceptorBase.java:449)
at java.security.AccessController.doPrivileged(Native Method)
at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.invoke(WLSMBeanServerInterceptorBase.java:447)
at weblogic.management.mbeanservers.internal.SecurityInterceptor.invoke(SecurityInterceptor.java:444)
at weblogic.management.jmx.mbeanserver.WLSMBeanServer.invoke(WLSMBeanServer.java:323)
at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:292)

update 25へのアップグレード後にのみこれが発生する理由を知っている人はいますか? この変更に関するコメントは見つかりませんでした。

皆さんありがとう。

4

1 に答える 1

0

何が原因なのかはわかりませんが… 考えられる解決策の 1 つはdumpAllThreads、現在行っていることの代わりに使用することです。

しかし、プロダクションコードが 30 秒ごとにそれを行っていることも不可解です。スレッド ダンプを取得するには、すべてのスレッドのスタック フレームのスナップショットを取得する必要があります。特にライブスレッドがたくさんある場合は、コストが高くなる傾向があります。あなたが達成しようとしていることを言うことができれば、軽量の代替案を提案できるかもしれません.

于 2013-10-13T08:21:23.503 に答える