티스토리 뷰
DBConnectionPool과 Thread는 많이 사용할수록 메모리를 많이 먹는다.
하지만 적게 사용하면 서버에서는 많은 요청을 처리할 수 없다.
DBConnectionPool은 운영중인 서버에서는 최소값과 최대값을 동일하게 맞춰놓는 것이 좋다.
사용자의 수가 갑자기 증가하면 ConnectionPool의 개수를 증가시켜야 하고,
증가하는 시점에 대기하는 시간이 발생할 확률이 크기 때문이다.
하지만 DB서버의 리소스가 부족하다면 최소값을 적게 해두는 것도 방법이다.
또한 Thread의 개수는 DBConnectionPool보다 살짝 높게 잡아야 한다.
그 이유로는 만약 Thread가 ConnectionPool보다 적으면 적은 수만큼의 연결은 필요가 없어지기 때문이다.
쉽게 풀어보자면 ConnectionPool은 강을 건너려는 사람이고, Thread는 1인승 배로 비유할 수 있다.
사람이 배보다 많으면 탈 수 있는 배가 부족하게 되고, 결국 배가 돌아올 때까지 사람은 기다려아한다.
즉 배의 개수보다 더 많은 사람이 강을 건널 순 없게 되는 것이다.
그렇다면 ConnectionPool과 Thread의 수가 같으면 되는 것이 아닌가?
Thread의 수가 ConnectionPool보다 많아야 하는 이유는 어플리케이션만 DB에 접속하는 것이 아니다. 다른 방식으로도 DB에 접속할 수 있기 때문에 여유분을 주는 것이다.
가장 최적화된 값을 찾는 방법은 성능테스트를 통해 제일 속도가 빠른 값을 찾는 것이다.
또한 Wait Time이라는 중요한 값도 존재한다.
이 값은 Connection이 모두 사용중일 때 남는 Connection을 찾는 데에 대기하는 시간이다.
Mybatis에서는 기본값이 20(초)인데 DB연결을 하지 못했을 때 사용자들이 20초동안이나
대기해야한다. 이는 너무 길기 때문에 조절해주어야 한다.
하지만 너무 짧은 경우에는 Full GC가 발생하게 되면 엄청난 Timeout을 내뿜을 수 있으므로
DB와 관련된 Framework을 설정할 때에는 Pool의 개수, Wait Time과 관련된 값과 설정들을
시스템 상황에 맞게 설정해야 시스템을 안정적으로 운영할 수 있다.
+Session Timeout
이는 web.xml에서 정의하며 설정 값은 분 단위이다.
요청이 없으면 세션을 메모리에서 제거하는 시간인데 이를 너무 크게 설정해놓으면
메모리에서 세션이 제거되질 않아 메모리를 좀먹는다.
그러므로 적절한 시간설정이 중요하다.
'Server' 카테고리의 다른 글
[Web Server 성능개선] Apache Web Server의 설정 (0) | 2015.04.20 |
---|---|
[Web Server 성능개선] 웹 서버와 WAS (0) | 2015.04.20 |
[성능] XML과 JSON, 직렬화 (0) | 2015.04.17 |
- Total
- Today
- Yesterday
- Jackson
- 리액트
- javascript
- Docker
- Swift 2.0
- 자바
- json
- 날짜
- RAMDA
- 람다
- 코어
- 성능개선
- 자바 성능
- 퍼포먼스
- react
- 컴퓨터 시간
- 성능
- Stream
- 시간
- 클로저
- 알람
- Java
- opensource
- 자료구조
- Clojure
- 프로세서
- 메모리
- gitlab
- rambda
- Java8
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |