좀 더 자세한 오류 메시지는 아래와 같습니다
com.mysql.jdbc.CommunicationsException: The driver was unable to create a connection due to an inability to establish the client portion of a socket.
This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable.
For Unix-based platforms, see the manual page for the 'ulimit' command. Kernel or system reconfiguration may also be required.
문제의 원인을 찾아보니 시스템에서 열 수 있는 소켓의 범위를 초과해서 외부에서 MySQL로 query를 보내는 클라이언트가 소켓을 열지 못해 발생하는 문제인 것 같습니다
근본적으로는 MySQL 쪽으로 query를 보내는 프로그램의 소스 코드에 오류가 있어 수정을 하도록 조치를 했지만 소켓의 최대 개수 설정 부분에 대한 의문이 생기더군요
그래서 좀 더 찾아봤더니 소켓의 경우는 MySQL의 설정보다도 시스템에 설치된 운영체제의 설정이 우선한다는 것을 알게 되었습니다
현재 my.cnf에서는 아래와 같이 소켓의 개수를 정의하고 있고
[mysqld_safe]
open-files-limit = 8192
시스템에서는 다음과 같이 소켓의 개수를 정의하고 있습니다
# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 30860
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 30860
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
# sysctl -a |grep file
fs.file-max = 370656
fs.file-nr = 1020 0 370656
제가 보기에 현재 설정이 뭔가 적절하지 않다는 생각이 드는데요
my.cnf와 시스템 설정 중에 잘못된 부분이나 수정이 필요한 내용이 있다면 어떤 것이 있는지 가르침을 좀 부탁드립니다
|