jdbc driver 명 |
mysql의 connectTimout, socketTimeout 에 해당되는 값 |
기본값 |
단위 |
적용방법 |
Oracle Thin Driver |
* connectTimout : oracle.net.CONNECT_TIMEOUT * socketTimout : oracle.jdbc.ReadTimeout |
0 (무한대기) |
밀리세컨드(ms) |
driver단에서 사용불가하고, dbcp 설정에서 사용 <property
name="connectionProperties" oracle.jdbc.ReadTimeout=6000"/> |
MS-SQL Server (jTDS Driver) |
* connectTimout : loginTimeout * socketTimout : socketTimeout |
0 (무한대기) |
초 (second) |
driver단에서 사용가능 jdbc:jtds:sqlserver://server:port/database; loginTimeout=60; socketTimeout=60 |
MYSQL Driver |
* connectTimout : connectTimeout * socketTimout : socketTimeout |
0 (무한대기) |
밀리세컨드(ms) |
사용 가능 jdbc:mysql://xxx.xx.xxx.xxx:3306/database? socketTimeout=60000 |
Cubrid Thin Driver |
조정 불가능 |
5 |
초 |
|
만약 우리가 관리하고 있는 서버에서 설정을 하지 않았다면 계속 무한대기 상태로 있을까요?
OS 레벨에서는 tcp 레벨 단위의 socket timeout 이 있는데요. 이 값에 영향을 받습니다.
리눅스의 경우는 커널 파라미터라고 그 값을 볼수도 바꿀 수 있습니다.
tcp_keepalive_time 파라미터는 " keepalive 가 활성되 되어 있을 경우, 얼마나 자주 TCP 가 keepalive 메세지를 보내게 할 것인지를 설정."에 대한 값을 정의합니다. tcp_fin_timeout은 "tcp fin 패킷에 대한 timeout"이며, tcp_syn_retries 는 "tcp syn 패킷을 몇번이나 시도할 것이냐"에 대한 값입니다. 이 모든 값은 os level 단의 timeout에 큰 영향을 미칩니다.
자세히 보도록 하겠습니다.
ubuntu 설정으로는 7200초 (2시간)이 디폴트값입니다.
cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
/proc/sys/net/ipv4/tcp_keepalive_intvl/와
/proc/sys/net/ipv4/tcp_keepalive_probes 의 값과 함께 계산되어 timeout이 될 때, 상당히 긴 시간동안
timeout 이벤트가 일어나지 않을 가능성이 높으니, db에 대한 timeout은 반드시 지정될 필요가 있습니다.
tcp fin 패킷을 못받는 경우에 대한 timeout은 60초 (1분)입니다.
cat /proc/sys/net/ipv4/tcp_fin_timeout
60
tcp syn 패킷에 대한 시도는 5번이나 합니다.
cat /proc/sys/net/ipv4/tcp_syn_retries
5
실제 timeout 은 특정 이벤트마다 시도 값 * timeout + 약간의 delay 으로 계산이 되겠죠?
DB단에서 이런 리눅스의 tcp 커널 파라미터를 수정하여 성능을 높이는 일을 많이하고 있습니다만, 웹 서비스쪽은 굳이 할 필요는 없다고 생각듭니다. 어플단에서 충분히 할 수 있으니까요.
os level 단에 있는 timeout을 의존하기 보다는 db connection에 대해서 socket timeout , connect timeout을 잘 정의하는 것이 훨씬 운영면에서 편리합니다.
'c or linux' 카테고리의 다른 글
sudo: /etc/sudoers is mode 0640, should be 0440 해결 (0) | 2011.11.08 |
---|---|
ubuntu 11.4 설치 이후 필요한 설정 및 어플 (0) | 2011.11.04 |
select / poll 시스템 콜 이해하기 (0) | 2011.10.26 |
웹 서비스 HTTPS 연결시 소켓 끊김 현상 및 해결사례 (1) | 2011.10.21 |
wireshark를 ubuntu에 사용하기 (0) | 2011.10.21 |