자바 프로세스가 무슨 짓을했는지 모든 수사가 전에 "테이블을 해부"로 전송됩니다?

원본 : 맛 (마이크로 채널 공공 숫자 ID : xjjdog)이 여동생, 공유하시기 바랍니다가, 소스를 보관하십시오 재현.

포렌식 같이 복잡한 케이스 무서워하지 고도로 분해 본체 무서워하지 않다. 대부분의 아무것도를 떠나하지 않습니다 우려하고있다. 빈, 어떤 첨단 기술, 풍부한 경험을 시작 할 수 없습니다.

복잡한 생산 환경, 몇 분 점프 공정 전에, 지금 링거, 죽어가 누워. 발견 증인으로 처음 장면을 유지하기 위해주의를 기울여야한다. 가끔 최악의 상황이 얽힌 태워지고, 이것은 우리가보고 싶은 것입니다.

삶의 과정을 사라지게하기 전에, 우리는 아직도 할 일이 많이가 있습니다. 이 문서에서는 일반적으로 예약 된 단서를 방법을 소개합니다. 마지막으로,이 과정은 쉘 스크립트 자동화를 사용합니다.

시스템 환경은 현장에서 거짓말을하지 않는다

도 1을 참조하면, 현재 네트워크 연결 장치

ss -antp > $DUMP_DIR/ss.dump 2>&1
复制代码

이 명령은 모든 네트워크 시스템은 출력 파일 ss.dump에 연결되어 있습니다. 많은 경우에서 NETSTAT 네트워크 연결, 구현이 매우 느리기 때문에, 대신에 SS를 netstat 명령을 사용하는 이유.

다양한 소면을보고, 또는 CLOSE_WAIT TIME_WAIT 또는 기타 연결 문제를 해결하는 데하여 후속 처리, 네트워크 연결 상태도 매우 유용합니다.

2, 네트워크 상태 통계

netstat -s > $DUMP_DIR/netstat-s.dump 2>&1
复制代码

네트워크 통계, NETSTAT - s.dump 파일에 출력. 그것은 출력 통계는 각 계약에 따라, 다음, 전체 네트워크 상태를 파악 매우 큰 역할을 할 수 있습니다.

sar -n DEV 1 2 > $DUMP_DIR/sar-traffic.dump 2>&1
复制代码

위의 명령은 SAR의 출력 전류 네트워크 트래픽을 사용합니다. 카드 상황이 발생 이상과 같은 레디 스 같은 일부 초고속 모듈에서 카프카는 자주 실행합니다.

3, 프로세스 자원

lsof -p $PID > $DUMP_DIR/lsof-$PID.dump
复制代码

이것은 매우 강력한 명령입니다. 당신은 파일이 유물이며, 열려있는 과정을 볼 수 있습니다, 당신은 프로세스 자원 차원의 전체 사용을 볼 수 있습니다. 자원, 느린 출력의 많은이 명령은 기다립니다.

4, CPU 리소스

mpstat > $DUMP_DIR/mpstat.dump 2>&1
vmstat 1 3 > $DUMP_DIR/vmstat.dump 2>&1
sar -p ALL  > $DUMP_DIR/sar-cpu.dump  2>&1
uptime > $DUMP_DIR/uptime.dump 2>&1
复制代码

이 주문, 우리가 버리다 '의 리눅스 ""(b)는 CPU의 장 " 기사는 자세한 설명이 있습니다. CPU로드 및 현재 시스템에서 메인 출력은, 나중에 조사를 용이하게한다.

이 명령의 기능은, 중복 많은 사용자가 선별에주의를 기울여야있다.

5, I / O 자원

iostat -x > $DUMP_DIR/iostat.dump 2>&1
复制代码

일반적으로, 중심의 서비스 노드를 계산하기 위해, I / O 리소스가 더 정상적인 것입니다. 그러나 때로는 과도한 로그 출력, 또는 디스크 문제와 같은 문제를 발생합니다. 각 디스크의 기본 명령 출력 성능 정보는 I / O 문제를 해결하는 데 사용됩니다.

6 메모리 문제

free -h > $DUMP_DIR/free.dump 2>&1
复制代码

메모리 문제는 더 복잡이 문서의 xjjdog 힙 외부 조사 요약을 볼 수 있습니다 관심이 있습니다. 일반적으로 발생하는 문제는 우리가 섹션 과정에서 설명, JVM 메모리 오버 플로우입니다.

무료 명령은 운영 시스템 메모리의 일반적인 개요를 표시 할 수 있습니다, 문제 해결은 매우 중요한 점이다.

7, 다른 세계

 ps -ef > $DUMP_DIR/ps.dump 2>&1
dmesg > $DUMP_DIR/dmesg.dump 2>&1
sysctl -a > $DUMP_DIR/sysctl.dump 2>&1
复制代码

다른 기사가 xjjdog에서, 우리는 dmesg 명령에 올 때 한 번 이상있다. dmesg를 많은 조용한 죽은 마지막 서비스는 단서를 떠났다.

물론, PS는 명령 실행의 최대 주파수로하고 일부 기준 값으로 결합 된 출력이다.

커널 구성 매개 변수 때문에, 시스템은 매우 큰 영향을 미칠 것입니다. 그래서 우리는 출력을 가지고있다.

프로세스 스냅 샷, 마지막 말

1있는 jinfo

${JDK_BIN}jinfo $PID > $DUMP_DIR/jinfo.dump 2>&1
复制代码

이 명령 출력됩니다 기본적인 자바 프로세스 정보. 환경 변수 및 매개 변수를 포함합니다.

(2) GC 정보

${JDK_BIN}jstat -gcutil $PID > $DUMP_DIR/jstat-gcutil.dump 2>&1
${JDK_BIN}jstat -gccapacity $PID > $DUMP_DIR/jstat-gccapacity.dump 2>&1
复制代码

그러면 jstat 출력 전류 GC 정보. 일반적으로, 단서는 실질적으로없는 경우, jmap는 분석 될 것임을 알 수있다.

3, 힙 정보

${JDK_BIN}jmap $PID > $DUMP_DIR/jmap.dump 2>&1
${JDK_BIN}jmap -heap $PID > $DUMP_DIR/jmap-heap.dump 2>&1
${JDK_BIN}jmap -histo $PID > $DUMP_DIR/jmap-histo.dump 2>&1
${JDK_BIN}jmap -dump:format=b,file=$DUMP_DIR/heap.bin $PID > /dev/null  2>&1
复制代码

jmap는 현재 덤프 정보 자바 프로세스를 얻을 것이다. 위와 같이, 사실, 가장 유용한는 네 번째 명령이지만, 앞에 세 가지 시스템의 예비 개요. 총 판단을 할 수 있습니다.

파일 때문에 처음 네 명령은 일반적으로 매우 큰 생성. 또한, 필요 결과를 얻기 위해 같은 MAT 깊이있는 분석과 같은 가져 오기 도구를 다운로드합니다.

4 실행 스택

${JDK_BIN}jstack $PID > $DUMP_DIR/jstack.dump 2>&1
复制代码

jstack을은 실행 스택의 시간에 얻을 것이다. 일반적으로 여러 번 값이 한 번 우리는 여기까지. 이 정보는 공정 조건에서 자바 스레드를 복원 할 수있는 것이 매우 유용하다.

top -Hp $PID -b -n 1 -c >  $DUMP_DIR/top-$PID.dump 2>&1
复制代码

보다 정확한 정보를 얻기 위해, 우리는 프로세스의 모든 스레드에 대한 정보를 얻을 수있는 최고 명령, CPU를 사용합니다. 이러한 방법으로, 당신은 결국 볼 수있는 것은 자원이 소요되는 곳이다.

5, 고급 교체

kill -3 $PID
复制代码

때때로, jstack을 실행할 수 없습니다. 거의 반응하지 자바 프로세스와 여러 가지 이유가 있습니다. 우리는 프로세스를 죽일 -3 신호를 보내려고합니다. 이 신호는 자바 프로세스가 로그 파일에 추적 정보를 출력합니다 jstack을 즐길 수 있습니다. jstack을이 프로그램은 대체입니다.

gcore -o $DUMP_DIR/core $PID
复制代码

jmap는 문제를 위해 수행 할 수 없습니다뿐만 아니라 벤치 떨어져, 즉, GDB의 구성 요소는 gcore 명령. 이 코어 파일을 생성합니다. 우리는 덤프를 생성하기 위해 다음 명령을 사용할 수 있습니다

${JDK_BIN}jhsdb jmap --exe ${JDK}java  --core $DUMP_DIR/core --binaryheap
复制代码

주 및 과도 상태의 역사

xjjdog 여기 두 용어를 만들 수 있습니다. 瞬时态이 일어나고 요소 샷의 종류를 말한다 历史态크롤의 주파수에 따라, 고정 된 기간의 관점에서의 변화를 모니터링하는 리소스를 가지고있다.

또한베이스 라인에 문제가 있기 때문에 위의 정보를 많이, 같은 CPU, 메모리 및 기타 시스템, 직관적 인만큼 좋지 역사 상태의 순간 상태의 값으로,이 있습니다. 클래스 시스템 모니터링 도구가있는 경우 그 것보다 더 많은 그래서.

그러나 등 lsof를, 힙를 들어,이 혼합 된 메시지의 시간 시리즈 개념이없는, 유용한 값을 생성, 모니터링 시스템을 입력 할 수 없습니다, 그것은 단지 일시적인 상태에 의해 분석 될 수있다. 이 경우, 순간적인 상태이지만 큰 값.

종료

나는 과정 위에 넣을 쉘 스크립트를 작성했습니다. 당신은 GitHub의에서 찾을 수 있습니다. 원본을 보려면 왼쪽 하단 코너를 클릭, 그것은 만날 수 있습니다.

https://github.com/sayhiai/shell
复制代码

분산 환경에서 오류가 종종 예기치 않게이의 독립 실행 형 증거의 원인, 그냥 표현 될 수 있음을 주목할 필요가있다. 그것은 거짓말을하지 못했지만, 그 뒤에 의미는 종종 문제가 잘못된 부트의 본질이다.


기분이 좋다? 그것을 장려하는 칭찬을 가리 킵니다.

관련 기사 :
(A) 기사 준비 "버리다"리눅스
"버리다"리눅스를 (b)는 CPU 기사
(3 개) 메모리 장 "버리다"리눅스를
"버리다", 리눅스 (4 개) I / O 장
"버리다"리눅스, (오) 네트워크 기사
자바 힙 메모리 외부 조사 요약

추천

출처juejin.im/post/5d4908d351882521da68d463