2013-10-13 1 views
0

최근에 우리는 SunOS 5.10 Generic_144488-17 sun4v sparc SUNW, Sun-Blade-T6340 시스템에서 Java 7 업데이트 7을 25로 업데이트했습니다. 업데이트 직후 WebLogic 11g에 배포 된 응용 프로그램의 심각한 성능 문제가 발생했습니다. 스레드 동안SunOS 5.10에서 Java 7 업데이트 25로 업그레이드 한 후에 성능 문제가 발생했습니다.

우리가 다음 코드의 원인은 응용 프로그램을 중지 덤프를 스레드하는 것을 발견 분석을 덤프합니다. 이 코드는 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 업데이트로 업그레이드 한 후 발생하는 이유를 알고 있습니까? 이 변경 사항에 대한 의견을 찾지 못했습니다.

감사합니다.

+0

왜 그렇게하고 있습니까? 확실한 해결 방법이 * 중지하는 것이 아니겠습니까? –

답변

0

나는이의 원인이 무엇인지 모른다 ...하지만 하나의 가능한 솔루션 대신 당신이 현재하고있는 일의 dumpAllThreads를 사용하려고하는 것입니다.

그러나 생산 코드가 ... 30 초마다하고 있다는 것도 당황 스럽습니다. 스레드 덤프를 만드는 것은 모든 스레드의 스택 프레임의 스냅 샷을 만드는 것입니다. 특히 라이브 스레드가 많은 경우 비용이 많이 든다. 성취하려는 것을 말할 수 있다면 가벼운 대안을 제안 할 수 있습니다.

+0

위의 코드는 사용되지 않는 코드로 삭제됩니다. Java 7 업데이트 25로 업그레이드 한 후에야 왜이 코드가 내 응용 프로그램에 영향을 미치는지 이해하려고합니다. –

+0

@ MaximKirilov - 내가 말했듯이, 나는 대답 할 수 없습니다. 나는 관련있는 것으로 보이는 버그 보고서를 찾을 수 없었다. 그러나 직접 사용할 수있는 리소스가 있습니다. 1) u7과 u25 사이의 릴리스를 차례로 시도하여 동작이 언제 변경되는지 파악합니다. 2) 해당 릴리스에서 변경된 모든 버그 목록을 찾고 /보십시오. 3) 다른 플 '폼에서. 제점을 재현 할 수 있는지 확인하십시오. 4) 변경된 내용을 추적하기 위해 OpenJDK Java 7 소스 코드 * 기록 *을 검사하십시오. –