2013-07-03 6 views
2

MySQL 연결을 생성하는 페이지에서 ab (apachebench)를 사용하여 사이트 중 하나를 벤치마킹하고 쿼리하여 PHP를 통해 연결을 닫습니다. 우리가에 연결할 수 없습니다 "가질 않지만새로운 연결에로드가 실패하더라도 MySQL max_connections를 치지 못함

는 우리는 열심히 우리가 스트레스 테스트를 실행 (500)

의 max_connections의 한계와 우리의 my.cnf 파일을 코딩 한

, MySQL은 결코 우리가 지정 연결 제한을 칠 것 같다 데이터베이스 "유형 오류가 발생했습니다. 그것은 마치 MySQL이 한 번에 ~ 237 개가 넘는 연결을 열 수없는 것과 같습니다. (또는 과정의 잘못을 우리가)

$ ulimit -a 
core file size   (blocks, -c) 0 
data seg size   (kbytes, -d) unlimited 
file size    (blocks, -f) unlimited 
max locked memory  (kbytes, -l) unlimited 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 16384 
pipe size   (512 bytes, -p) 1 
stack size    (kbytes, -s) 8192 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 1250 
virtual memory   (kbytes, -v) unlimited 

문제 중 하나를 PHP 나 MySQL과 것으로 보인다 :

[mysqld] 
max_connections = 500 
port   = 3306 
socket   = /var/mysql/mysql.sock 
skip-external-locking 
key_buffer_size = 384M 
max_allowed_packet = 1M 
sort_buffer_size = 2M 
read_buffer_size = 2M 
read_rnd_buffer_size = 8M 
myisam_sort_buffer_size = 64M 
thread_cache_size = 8 
query_cache_size = 128M 
thread_concurrency = 8 
max_heap_table_size = 512M 
tmp_table_size = 512M 
table_cache = 2048 

사용자 제한 :

여기에 우리의 현재의 my.cnf입니다.

모든 도움, 제안 및 팁을 미리 감사드립니다. 미리 감사드립니다.

+0

활성 연결을 어떻게 측정합니까? – Bjoern

+0

우리는 실시간 연결을 측정하지 않습니다. 우리는 스트레스 테스트 후 상태 변수 Max_used_connections를 사용하여 최대 사용 연결 수를 즉시 측정합니다. 또한 MySQLTuner (perl 스크립트)는 다음과 같이 보여줍니다. 사용 가능한 연결의 최대 사용률 : 47 % (237/500). –

+0

_ "데이터베이스에 연결할 수 없습니다"_라는 오류가 발생하면 'max_connections'에 도달했기 때문이 아닙니다.이 경우 _ 많은 연결 수 _가 표시됩니다. 실패는 또 다른 문제가있는 것 같습니다. – Bjoern

답변

2

좋아요, 그래서이 문제의 범인을 발견했습니다.

스트레스로드를 실행 중일 때 점진적이지 않았습니다. 모든 연결이 한 번에 열리고 서버가 가득 찼습니다.

MySQL의 기본값은 back_log이며, 이는 MySQL이 처리 할 수있는 미해결 연결 수입니다. 서버를 넘치게 할 때이 한계에 도달했으며 50 개의 임계 값을 초과하는 연결은 거부되었습니다.

이 문제를 해결하기 위해, 우리는 우리의 설치에 작동하는 합리적인 128 청취 백 로그 증가, 다음 줄에 my.cnf 파일을 편집 :

back_log = 128 

이 최대 값을 여기에 입력 할 수 있음을 양해하여 주시기 바랍니다 OS 및 OS 내에서 설정된 제한에 따라 다릅니다. MySQL은 65535의 최대 수신 대기 백 로그를 가질 수 있지만 OS의 수치는 그보다 작을 수 있습니다.

새로운 back_log가 128이면 문제가 해결되어 더 이상 Connection refused 오류 메시지가 표시되지 않습니다.