在SunOS 5.10上升级到Java 7更新25后的性能问题

时间:2013-10-13 06:38:06

标签: java performance sunos

最近,我们在 SunOS 5.10 Generic_144488-17 sun4v sparc SUNW,Sun-Blade-T6340 计算机上更新了我们的Java 7更新7以更新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)

有人知道为什么只有在升级到更新25后才会发生这种情况?我没有发现任何关于这种变化的评论。

全部谢谢。

1 个答案:

答案 0 :(得分:0)

我不知道原因是什么......但一种可能的解决方案是尝试使用dumpAllThreads而不是您目前正在做的事情。

但是,你的生产代码每隔30秒才会这样做,这也令人费解。进行线程转储涉及拍摄每个线程的堆栈帧的快照。这可能很昂贵,特别是如果你有很多活线程。如果你能说出你想要达到的目标,也许我们可以提出一个轻量级的选择。