>Java >java지도 시간 >생산 결함을 찾는 btrace 방법

생산 결함을 찾는 btrace 방법

高洛峰
高洛峰원래의
2017-02-27 15:35:231509검색

머리말

프로그램 실행에 대해 더 자세한 내용을 알아야 할 경우가 많지만 개발 중에 프로그램의 실행 세부 정보를 모두 인쇄하는 것은 불가능합니다. 일반적으로 이때 할 수 있는 작업은 코드를 수정하고 다시 배포한 다음 다시 관찰하는 것입니다. 참조된 다른 외부 패키지 등과 같이 변경하기 어려운 경우 BTrace는 코드를 변경하거나 애플리케이션을 다시 시작하지 않고도 프로그램 실행 세부 정보를 동적으로 볼 수 있는 도구입니다. 다음 기사에서는 생산 오류를 찾는 btrace 방법을 소개합니다. , 도움이 필요한 친구가 참조할 수 있습니다.

현상

일부 요청은 데이터 액세스 계층을 통해 속도가 매우 느려 처리 스레드가 차단되고 모니터링에서 예외를 감지할 수 없습니다.

btrace 스크립트 작성

@BTrace
public class DBProxyTrace {

 @OnMethod(clazz = "xxx.xxx.QueryHandler", method = "query",
  location = @Location(Kind.RETURN))
 public static void trace2(String sql, @Duration long duration) {
 if (duration/1000000 > 10 * 1000) {
  com.sun.btrace.BTraceUtils.println(duration/1000000 + "ms");
  com.sun.btrace.BTraceUtils.println("this task executes more than 10s. the sql is : "
   + sql);
  com.sun.btrace.BTraceUtils.println("jstack is : ");
  com.sun.btrace.BTraceUtils.jstack();
 }
 }
}

10초 이상 실행되는 SQL 및 스택 정보를 판단합니다.

DBProxyTrace.Java 스크립트를 컴파일하여 스크립트에 문제가 없는지 확인합니다.

./bin/btracec -cp build/ java/DBProxyTrace.java

DBProxyTrace.class 스크립트 실행

./bin/btrace -cp build/ 17342 DBProxyTrace.class

정보

10468ms
this task executes more than 10s. the sql is : rollback
jstack is :
xxx.QueryHandler.query(QueryHandler.java:106)
xxx.net.AbstractConnection.onReadData(AbstractConnection.java:245)
xxx.net.NIOReactor$RW.run(NIOReactor.java:77)
java.lang.Thread.run(Thread.java:745)

포지셔닝

트랜잭션 롤백 차단.

추가 위치 지정을 위해 jstack을 사용하세요.

JVM 스택 인쇄

"$_NIOREACTOR-7-RW" prio=10 tid=0x00007f069856f000 nid=0xde1 waiting for monitor entry [0x00007f0677011000]
 java.lang.Thread.State: BLOCKED (on object monitor)
 at Oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:1167)
 - waiting to lock <0x000000068086fbc0> (a oracle.jdbc.driver.T4CConnection)

결론

Blocked The oracle 드라이버 롤백 작업은 실제로 Oracle 드라이버가 직렬 요청 응답을 보장하기 위해 하위 계층에 잠금을 추가하고 이 채널이 느린 명령문에 의해 차단되므로 롤백이 차단되기 때문입니다.

btrace의 생산 결함 찾기 방법과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.