리눅스 자바 프로그램의 메모리 분석에서 (PMAP, jmap는, 그러면 jstat)

 

1 PMAP보기 프로세스 메모리

실행 명령

메모리 사용량 사용량의 특정 과정 (비 자바가있을 수 있습니다) 볼 수 있습니다 PMAP를 사용하여,

형식 :

pmap 进程id
  • 1

예 쇼

pmap 12358
  • 1

첫 번째 열, 메모리 블록의 선두 어드레스 
번째 열에 대한 메모리 크기 
번째 열, 메모리 권한 
네번째 컬럼은 메모리의 이름, 동적 메모리 할당 아논가 스택 스택 메모리를 나타내고 
, 마지막 행, 전체 메모리 점유 사이즈를 참고 여기 상단을 통해 볼 수있는 물리적 메모리 크기를 가지고 가상 메모리의 크기이고,

여기에 설명 된 사진을 쓰기

2, jmap는보기 자바 프로세스 개체 사용

실행 명령

사용 jmap는 각 개체, 얼마나 많은 메모리 풋 프린트, 얼마나 많은 경우 자바 프로세스를 볼 수 있습니다 
명령 형식 :

jmap -histo 进程id
  • 1

예 쇼

jmap -histo  12538
  • 1

첫 번째 열 수없는 실용적인 의미 
번째 열에서 객체 인스턴스의 수가 
세 번째 열에서, 객체 인스턴스 유닛이 차지하는 메모리의 총량 : 바이트 
네번째 열에 객체 인스턴스의 이름 
마지막 행 점유 메모리의 총 개수의 인스턴스의 총 개수

여기에 설명 된 사진을 쓰기

여기에 설명 된 사진을 쓰기

jmap -heap 1024 > jmap-heap-1024.bin
  • 1

여기에 설명 된 사진을 쓰기

(3) 그러면 jstat 명령은 GC JVM의 케이스를 볼

그러면 jstat 명령 형식 :

jstat [Options] vmid [interval] [count]
  • 1

매개 변수 :

옵션, 옵션, 우리는 일반적으로 -gcutil보기 GC 상황 사용 
VMID, VM 프로세스 ID, 현재 실행중인 자바 프로세스 ID 
초 간격, 시간 간격을 밀리 초는 
, 인쇄 시간을 계산 기본 인쇄 여러 번 경우

예 쇼

jstat -gc 1024 5000
  • 1

즉, 자바에 5 초 간격으로 표시 케이스 GC 프로세스 번호 1024 것

여기에 설명 된 사진을 쓰기

(부분적인 결과들은 설명되지 않을 것이며, 서로 다른 파라미터로 표시됨)은 다음과 같이 콘텐츠 표시 :

S0C:年轻代中第一个survivor(幸存区)的容量 (字节) 
S1C:年轻代中第二个survivor(幸存区)的容量 (字节) 
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节) 
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节) 
EC:年轻代中Eden(伊甸园)的容量 (字节) 
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节) 
OC:Old代的容量 (字节) 
OU:Old代目前已使用空间 (字节) 
PC:Perm(持久代)的容量 (字节) 
PU:Perm(持久代)目前已使用空间 (字节) 
YGC:从应用程序启动到采样时年轻代中gc次数 
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s) 
FGC:从应用程序启动到采样时old代(全gc)gc次数 
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s) 
GCT:从应用程序启动到采样时gc用的总时间(s) 
NGCMN:年轻代(young)中初始化(最小)的大小 (字节) 
NGCMX:年轻代(young)的最大容量 (字节) 
NGC:年轻代(young)中当前的容量 (字节) 
OGCMN:old代中初始化(最小)的大小 (字节) 
OGCMX:old代的最大容量 (字节) 
OGC:old代当前新生成的容量 (字节) 
PGCMN:perm代中初始化(最小)的大小 (字节) 
PGCMX:perm代的最大容量 (字节) 
PGC:perm代当前新生成的容量 (字节) 
S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比 
S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比 
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比 
O:old代已使用的占当前容量百分比 
P:perm代已使用的占当前容量百分比 
S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节) 
S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节) 
ECMX:年轻代中Eden(伊甸园)的最大容量 (字节) 
DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满) 
TT: 持有次数限制 
MTT : 最大持有次数限制

Java 堆分为新生代和老年代,新生代一般划分为三块区域,Eden + From Survivor + To Survivor,Eden 和 Survivor 的内存比为8:1,每次只使用一个Eden 和一个 Survivor 区域,另一个 Survivor 用于复制收集算法回收内存。

对象一般尽量分配到新生代中,而对于大对象(长字符串和大数组)直接分配在老年代中,同时“年龄”长的的对象会从新生代自动晋升到老年代中。

Java 方法区称为永久代,只有 HotSpot 虚拟机才存在永久代。

에덴 영역 할당이 불충분하면 자동 마이너 GC 한번 일어난다.

승진하면 마이너 GC를 발생하는 경우, 가상 시스템이 자동으로 감지 (상대적으로) 이전 시대로 승진 메모리 크기 오브젝트의 새로운 세대 나머지 세 메모리 크기는> 남아, 전체 GC가 발생, 홍보 <남아, 오래된 감지하는 경우 실패를 보장 할 수없는 경우 실패 할 수이라면, 전체 GC가 발생, 보안 실패를 허용 마이너 GC를 수행할지 여부를 메모리의 보증 HandlePromotionFailure.

인쇄 스택 정보

jmap는의 -dump : 형식 = B, = 파일 / 파일 경로 / heap.bin PID

 


jstack을 PID 

 

추천

출처blog.csdn.net/qq_34730511/article/details/80647046