자바 오픈 소스 진단 도구 Arthas 사용 방법 상세 설명

머리말
1.핫 업데이트 코드 의 장면
(1)온라인 서버 에 문제 가 생 겼 을 때 기 존의 수단 으로 문제점 을 발견 하지 못 할 때 가 있 습 니 다.로 그 를 추가 로 인쇄 하거나 디 버 깅 코드 를 추가 해 야 할 수도 있 습 니 다.만약 에 저희 가 코드 를 바 꾸 고 재배 치 하면 문제 현장 을 파괴 할 수 있 습 니 다.열 배치 의 손 부분 을 통 해 디 버 깅 코드 를 추가 할 수 있 습 니 다.
(2)온라인 에 긴급 bug 가 발생 하면 Review 코드 를 통 해 문 제 를 찾 을 수 있 습 니 다.수정 후 포장 배치 절차 가 오래 걸 릴 수 있 으 므 로 핫 배치 코드 를 통 해 문 제 를 신속하게 해결 할 수 있 습 니 다.
2.알 리 바 바 가 오픈 한 자바 진단 도구 사용
-Arthas,그 는 우리 의 자바 서버 프로 세 스 에 붙 어 서버 상태,jvm 상태 등 각종 매개 변수 지 표를 볼 수 있 고 열 업데이트 도 할 수 있 습 니 다.
1,다운로드 시작 Arthas
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
2.시작 하면 현재 기기 의 모든 자바 프로 세 스 가 표 시 됩 니 다.모니터링/수정 이 필요 한 프로 세 스 를 선택 하고 번 호 를 입력 하여 리 턴 합 니 다.
3.일부 상용 명령 은 온라인 상에 서 문제 가 발생 하면 다음 명령 을 통 해 각 항목 의 지표 에 이상 이 있 는 지 확인 할 수 있다
  • dashboard―현재 시스템 의 실시 간 데이터 패 널
  • thread―현재 JVM 의 스 레 드 스 택 정보 보기
  • jvm―현재 JVM 의 정보 보기
  • sysprop―JVM 의 시스템 속성 보기 및 수정
  • sysenv―JVM 의 환경 변 수 를 봅 니 다
  • getstatic―클래스 의 정적 속성 보기
  • (1)상위 5 명 이 CPU 를 가장 많이 소모 하 는 스 레 드 를 인쇄 하면 CPU 가 너무 높 은 코드 위 치 를 신속하게 찾 을 수 있다.
    thread -n 5
    (2)어떤 함수 의 호출 스 택 보기
    stack<클래스 패키지 이름><함수 명>
    (3)특정한 함수 의 어느 하위 호출 이 가장 느 린 지 확인 합 니 다[중점].가장 오래 걸 리 는 호출 은 빨간색 으로 표 시 됩 니 다.특정한 기능 에서 가장 오래 걸 리 는 조작 을 쉽게 찾 을 수 있 습 니 다.
    trace<클래스 패키지 이름><함수 명>
    (4)특정한 함수 의 호출 통계 데 이 터 를 감시 하고 총 호출 횟수,평균 운행 시간,성 공률 등 정 보 를 포함한다.
    monitor<클래스 패키지 이름><함수 명>
    4.exit 를 입력 하면 현재 연결 을 종료 할 수 있 지만 서버 프로 세 스에 붙 어 있 는 Arthas 가 실행 중 입 니 다.완전히 종료 하면 shutdown 을 입력 할 수 있 습 니 다.
    업데이트
    1.우선 코드 를 업데이트 해 야 할 패키지 이름 을 찾 습 니 다.jad 명령 을 통 해 온라인 에서 실행 중인 코드 를 역 컴 파일 합 니 다.
    jad--source-only<패키지 이름><디 렉 터 리 내 보 내기+파일 이름>
    2.자바 코드 를 받 은 후에 우 리 는 수요 에 따라 코드 를 수정 해 야 합 니 다.주의해 야 할 것 은 이 핫 업데이트 코드 의 실제 원 리 는 자바 기본 클래스 자바.lang.intrument.Instrumentation 의 redefineClasses 방법 을 호출 하 는 것 입 니 다.그 는 바이트 코드 를 수정 하여 기 존의 class 파일 을 교체 할 수 있 습 니 다.그 중에서 많은 제한 이 있 습 니 다.
    (1)예 를 들 어 field/method 를 추가 하거나 삭제 할 수 없습니다.
    (2)종료 되 지 않 은 함 수 는 유효 하지 않 습 니 다.예 를 들 어 하나의 함수 체 내 에 where(true)순환 이 있 고 영원히 끝나 지 않 습 니 다.그러면 우리 가 수정 한 코드 도 영원히 유효 하지 않 습 니 다.
    우 리 는 로그 인쇄 를 추가 하 는 등 함수 에 코드 를 추가 할 수 있다.
    3.코드 를 수정 한 후에 우 리 는 이 클래스 에 대응 하 는 클래스 로 더 를 찾 아야 합 니 다.이 class 를 불 러 오고 다음 명령 을 실행 하면 클래스 로 더 의 대상 주 소 를 되 돌려 줍 니 다.
    sc-d<패키지 이름>|grep classLoaderHash
    4.메모리 컴 파일 을 통 해 자바 파일 을 Class 파일 로 컴 파일 합 니 다.
    mc-c<클래스 로 더 의 대상 주소><자바 파일 이 있 는 디 렉 터 리+파일 이름>
    5.마지막 으로,우 리 는 명령 을 통 해 class 파일 을 열 업데이트 합 니 다.
    redefine
    6.업데이트 가 끝나 면 의외 의 사고 가 발생 하지 않 으 면 바로 효력 이 발생 합 니 다.이때 코드 가 효력 이 발생 했 는 지 검증 할 수 있 습 니 다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기