LANGUAGE/Java & Groovy 2016. 5. 10. 18:06

///// 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):

http://yjacket.tistory.com/61


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


http://becko.tistory.com/62

'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