티스토리 뷰

728x90

'어떻게 모니터링을 하는가', 

'어떻게 JVM 옵션을 주어야 하는가', 

'코드 수정 필요 판단은 어떻게 하는가'

 

### 물론 하나의 서버에 몇 개의 JVM이 동작할 것인가는

- 서버의 코어 개수와 애플리케이션의 특성 등에 따라 결정되겠지만 응답 반응성 관점에서 양자를 비교해볼 때,

같은 애플리케이션일 경우

2GB의 힙을 사용하는 경우가 8GB 크기의 힙을 사용하는 것보다 풀 GC에 걸리는 시간이 짧아 응답 반응성에 유리하다.

- 하지만 8GB 힙을 사용하면 2GB보다 풀 GC 발생 간격이 그만큼 줄어들 것이고

내부 캐시를 사용하는 애플리케이션이라면 히트율을 높여 응답 반응성을 높일 수 있다.

 

### JVM 선택이란 32bit JVM을 사용할 것이냐 64bit JVM을 사용할 것이냐에 대한 결정이다.

- 동일 조건이라면 32bit JVM을 선택하는 것이 좋다. 32bit JVM이 64bit JVM보다 수행 성능이 좋기 때문이다.

- 32bit JVM은 논리적 최대 사용 가능 힙 크기가 4GB로,

- 이보다 큰 크기의 힙을 사용할 필요가 있을 때 64bit JVM을 사용하는 것이 좋다

(단 32bit OS/64bit OS 모두 실제 사용 할당 크기는 2~3GB 정도다).

 

### 웹 애플리케이션 서버 위주로 JVM 옵션 지정 방법을 설명하겠다.

모든 경우라고 할 수는 없지만 대부분의 웹 서버 애플리케이션에서 가장 좋은 GC 알고리즘은 Concurrent Mark Sweep GC다. 

 

종류 옵션
동작 모드 -sever
전체 힙 크기 -Xms와 –Xmx의 값을 같게
New 영역 크기 -XX:NewRatio 2~4 정도의 값
  -XX:NewSize=?
–XX:MaxNewSize=?
NewRatio 대신 NewSize를 지정하는 것도 좋다.
Perm 크기 -XX:PermSize=256m
-XX:MaxPermSize=256m
성능에 영향을 미치지 않으므로 동작에 문제가 없을 정도만 지정한다.
GC 로그 -Xloggc:$CATALINA_BASE/logs/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
GC로그를 남기는 것은 특별히 Java 애플리케이션 수행 성능에 영향을 미치지 않는다. 가급적이면 GC 로그를 남기는 것이 좋다.
GC 알고리즘 -XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
일반적으로 권할만한 설정일 뿐이다. 애플리케이션 특성에 따라 다른 선택이 더 좋을 수 있다.
OOM 에러 발생 시 힙 덤프 생성 -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=$CATALINA_BASE/logs
OOM 발생 이후 조치 -XX:OnOutOfMemoryError=$CATALINA_HOME/bin/stop.sh 또는
-XX:OnOutOfMemoryError=$CATALINA_HOME/bin/restart.sh 힙 덤프를 남긴 뒤, 관리 정책에 맞게 적합한 동작을 취할 수 있도록 한다.

 

TPS: transaction

OPS: operation

RPS: request

 

### 빠른 객체 GC

 

- 객체의 크기를 가급적 작게 유지한다.

- Collection이나 기타 Container 형태의 자료구조 안에서 배열의 크기를 변경하는 작업은 가급적 피하자.

- SoftReference는 사용하지 않는 게 좋다.

 

### 충분한 목표 성능을 만족하고 있다면 굳이 튜닝을 하지 않는 것이 효율적이다.

  • 문제는 단 한 곳에 있고 그 하나만 수정하면 된다: 파레토 이론은 성능 튜닝에도 적용된다. 문제는 반드시 하나라는 의미보다는 가장 성능에 영향을 미치는 하나에만 집중해 접근할 필요가 있다는 뜻으로 해석하자. 하나에 집중해서 해결하고 난 다음에 다른 문제 해결을 위해 노력하도록 하자.
  • 풍선 효과: 무엇을 얻기 위해 무엇을 포기해야 하는지 결정해야 한다. 캐시를 적용해 응답 반응성을 높일 수는 있지만 캐시의 크기가 커지면 풀 GC 시간이 길어질 수 있다. 적은 메모리 사용량을 선택하면 대개 처리 용량이나 응답 반응 시간이 나빠진다. 하나를 선택하면 하나를 포기해야 한다는 것을 염두에 두고 우선순위를 정해 선택하자.

 

 

https://d2.naver.com/helloworld/184615

 

728x90

'공부' 카테고리의 다른 글

[NoSQL] HBase vs MongoDB  (0) 2022.02.13
[NoSQL] CAP(Consistency, Availability, Partition Tolerance) PACELC  (0) 2022.02.13
[Apache Zookeeper] 주키퍼의 기본 특징  (0) 2022.02.13
[Regex] id, pw, email  (0) 2022.02.13
[Kafka] research  (0) 2022.02.04
댓글