티스토리 뷰
'어떻게 모니터링을 하는가',
'어떻게 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
'공부' 카테고리의 다른 글
[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 |
- Total
- Today
- Yesterday
- 개리마커스
- 김달
- 연애학개론
- wlw
- COUNT
- 레퍼럴
- follower
- 할인
- 테슬라 레퍼럴 적용 확인
- 테슬라
- 테슬라 추천
- 테슬라 리퍼럴 코드
- 인스타그램
- 팔로워 수 세기
- 테슬라 레퍼럴
- 모델 Y 레퍼럴
- 메디파크 내과 전문의 의학박사 김영수
- 테슬라 레퍼럴 코드 확인
- 테슬라 리퍼럴 코드 혜택
- 모델y
- Bot
- 클루지
- 어떻게 능력을 보여줄 것인가?
- 책그림
- 유투브
- Kluge
- 테슬라 크레딧 사용
- 테슬라 리퍼럴 코드 생성
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |