검색결과 리스트
글
///// Linux
///// 성능 확인
- SYSTEM 전체 메모리 확인
$ free
- JVM Tomcat process 메모리 확인
$ ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,cmd --sort -rss | head -n 5
RSS: java가 사용중인 메모리
VSZ: 메모리 최대할당량
%MEM: 장비의 메모리 중에 본 java 차지하는 비중
%CPU: 장비의 CPU가 본 java로 인해 사용하는 비중
$ jstat -gcutil {PID}
$ jstat -gccapacity {PID}
- 기타
- 시스템 정보 확인 - $ uname -a
- 리눅스 배포판 정보 확인 $ cat /etc/issue
- CPU 정보 확인 - $ cat /proc/cpuinfo
- CPU 버전 확인 - $ cat /proc/version
- 메모리 정보 확인 - $ cat /proc/meminfo
- 네트워크 정보 확인 - $ cat /proc/net/netlink
- HDD 용량 확인 - $ df -h
///// JVM
프로세스 확인
s -ef |grep java
pgrep java
jps
jinfo -flag PermSize <PID>
jmap -permstat <PID>
jmap -heap <PID>
///// JVM 메모리 영역
- 영역
1. Young Generation(YG)
(1) Eden
(2) Survivor0(S0)
(3) Survivor1(S1)
2. Old Generation(OG)
3. Permanent
- 흐름
YG(Eden -> S0, S1) -> OG ->
- 적정비율( new : old )
CLIENT APP is 1 : 3~5
SERVER APP is 1 : 2
///// 모니터링
1. catalina.sh에서 JAVA_OPTS에 추가
-XX:-PrintGC -XX:-PrintGCDetails -XX:-PrintGCTimeStamps -XX:-TraceClassUnloading -XX:-TraceClassLoading
2. # jstat -gcutil {PID}
- 용어 설명
S0: Survivor 0
S1: Survivor 1
E : Eden
O : Old Generation
P : Permanent
YGC: YoungGeneration Garbage Collection 횟수
YGCT: YoungGeneration Garbage Collection 총시간
FGC: OldGeneration Garbage Collection 횟수
FGCT: OldGeneration Garbage Collection 총시간
GCT : 전체 GC 총시간
- 확인해보자
YGCT / YGC = Minor GC (YoungGeneration의 GC에 걸린 초(s))
FGCT / FGC = Full GC (OldGeneration의 GC에 걸린 초(s))
3. # jstat -gccapacity {PID}
- 용어 설명
NGCMN: NewGeneration 영역 최소크기
NGCMX: NewGeneration 영역 최대크기
OGCMN: OldGeneration 영역 최소크기
OGCMX: OldGeneration 영역 최대크기
PGCMN: Permanent 영역 최소크기
PGCMX: Permanent 영역 최대크기
///// 조작법
0. GC방식 튜닝
- catalina.sh에서 JAVA_OPTS
-XX:SurvivorRatio=8
- 단일 thread로 GC수행하는 방식
-XX:+UseSerialGC
- 여러개의 thread가 GC를 한다. 메모리 많고 코어 많을떄 좋다.
-XX:+UseParallelGC
- Parallel GC와 비슷하지만, Old 영역의 FullGC 시에도 stop the word를 하지 않고 진행이 된다.
-XX:+UseParallelOldGC
- Old GC의 Stop-the-word를 최대한 줄이고자 할때 사용한다.
-XX:+UseConcMarkSweepGC
- New와 Old의 개념은 있지만 구간과 promotion 개념이 사라졌다.
-XX:+UserG1GC
- 옵션 설정 ...?
-server
-Xms1024m
-Xmx1024m
-XX:NewSize=512m
-XX:MaxNewSize=512m
-XX:PermSize=256m
-XX:MaxPermSize=256m
-XX:NewRatio=2
0. ./conf/server.xml에서
maxThreads="150"
///// Crashes (크래쉬스)
- FILE NAME : hs_err_pid<PID>.log
- FILE FORMAT :
(1) header
(2) thread
(3) process
(4) system
///// 참조
JVM 성능 튜닝 -GC 튜닝:
http://blog.naver.com/2feelus/220619608820
Hotspot JVM의 Garbage Collection:
http://blog.naver.com/2000yujin/130158005380
http://blog.naver.com/2000yujin/130158019139
http://blog.naver.com/2000yujin/130158276943
Garbage Coleection:
http://yckwon2nd.blogspot.kr/2014/04/garbage-collection.html
JVM Error file(crash report):
Why are hs_log_pid log files placed on desktop after a Java crash?:
http://www.java.com/en/download/help/error_hotspot.xml
Java HotSpot VM Options:
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#DebuggingOptions
고맙다 JVM, 사과해라 JVM 크래시:
http://d2.naver.com/helloworld/1134732
How to avoid jmap error - Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process:
http://sanjeewamalalgoda.blogspot.kr/2014/01/how-to-avoid-jmap-error-error-attaching.html
Java TM 2 Platform, Standard Edition 5.0 Troubleshooting and Diagnostic Guide:
http://www.oracle.com/technetwork/java/jdk50-ts-guide-149808.pdf
Linux에서 생성된 자바 core dump 분석하기:
http://www.tuning-java.com/463
'LANGUAGE > Java & Groovy ' 카테고리의 다른 글
[Groovy] JSON 객체화, 문자화 (0) | 2016.10.04 |
---|---|
[Groovy] switch case (0) | 2016.07.08 |
[Java] 정규식 활용 (0) | 2016.04.30 |
[Java & Groovy] sort (0) | 2016.04.26 |
[Java] jar파일 풀고 수정하고 재압축하기 (0) | 2016.04.26 |