mysql.sock을 통한 고부하 시 PHP/MYSQL 연결 실패
이 질문을 하기 전에 많은 내용을 읽었기 때문에 먼저 연결, 메모리 또는 CPU가 부족하지 않으며 파일 기술자도 부족하지 않다고 설명하겠습니다.
MySQL의 부하가 높을 때 PHP가 내게 주는 것은 다음과 같습니다.
소켓 '/var/lib/mysql/mysql'을 통해 로컬 MySQL 서버에 연결할 수 없습니다.sock' (11 "리소스를 일시적으로 사용할 수 없습니다")
이것은 로드 중에 랜덤하게 발생합니다만, 푸시하면 할수록, php는 이것을 자주 나에게 던집니다.이 경우 빠른 UNIX 소켓을 사용하는 "localhost" 대신 콘솔을 통해 PHP에서 127.0.0.1을 통해 로컬로 연결할 수 있습니다.
다음은 일반적인 문제를 제거하기 위한 몇 가지 시스템 변수입니다.
cat /proc/sys/fs/file-max = 4895952
lsof | wc -l = 215778 (during "outages")
사용 가능한 접속의 최대 사용률: 261/1000
InnoDB 버퍼 풀 / 데이터 크기: 10.0G/3.7G (공간이 넉넉함)
- 소프트 파일999999
- 하드 파일 99999
실제로 MariaDB(서버 버전: 10.0.17-MariaDB MariaDB Server)를 실행하고 있습니다.
이러한 결과는 일반 부하 시에도 생성되며, 시간 외에도 mysqlslap을 실행하면 생성되므로 느린 쿼리는 문제가 되지 않습니다.단, 높은 연결만 가능합니다.
조언 좀 해주시겠어요?필요에 따라 추가 설정/데이터를 보고할 수 있습니다.mysqltuner.pl 에서는 모든 것이 정상이라고 합니다.
여기서 알 수 있는 것은 IP를 통한 접속이 정상적으로 동작하고 이러한 장애 발생 시에도 고속이라는 것입니다.이 이유는 알 수 없습니다.
편집: my.ini입니다(최근의 트러블 슈팅 변경으로 인해 일부 값이 다소 높은 것 같습니다.MySQL 로그, 시스템 로그, dmesg에는 오류가 없음을 유의하십시오).
socket=/var/lib/mysql/mysql.sock
skip-external-locking
skip-name-resolve
table_open_cache=8092
thread_cache_size=16
back_log=3000
max_connect_errors=10000
interactive_timeout=3600
wait_timeout=600
max_connections=1000
max_allowed_packet=16M
tmp_table_size=64M
max_heap_table_size=64M
sort_buffer_size=1M
read_buffer_size=1M
read_rnd_buffer_size=8M
join_buffer_size=1M
innodb_log_file_size=256M
innodb_log_buffer_size=8M
innodb_buffer_pool_size=10G
[mysql.server]
user=mysql
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
open-files-limit=65535
가장 가능성이 높은 것은net.core.somaxconn의 가치는 무엇입니까?/proc/sys/net/core/somaxconn
net.core.somaxconn
# The maximum number of "backlogged sockets". Default is 128.
큐에 아직 연결되지 않은 연결.이 큐 위에 있는 것은 모두 거부됩니다.당신 사건에서 이것이 의심됩니다.부하에 맞게 늘려보세요.
root 사용자 실행 시
echo 1024 > /proc/sys/net/core/somaxconn
이것은 분석을 통해 해결할 수 있고 해결해야 할 문제입니다.이것을 하는 방법을 배우는 것은 매우 좋은 기술이다.
고부하 상태에서 무슨 일이 일어나고 있는지 알아보기 위한 분석...쿼리 수, 실행 시간이 첫 번째 단계여야 합니다.로드를 확인한 후 적절한 db config 설정을 합니다.대신 SQL 쿼리를 최적화해야 할 수 있습니다.
그런 다음 데이터베이스 연결을 완전히 활용하기 위해 PHP db 드라이버 설정도 정렬되어 있는지 확인합니다.
다음은 MariaDB 스레드풀 매뉴얼 링크입니다.버전 5.5로 되어 있는 것은 알고 있습니다만, 아직 관련성이 있어, 이 페이지는 버전 10을 참조하고 있습니다..cnf 파일에는 없을 수 있는 설정이 나열되어 있습니다.
https://mariadb.com/kb/en/mariadb/threadpool-in-55/
max_connections를 문제의 원인으로 생각할 수 있습니다.최소한 가능성을 없애기 위해서라도 한도를 늘리고 싶어요.
도움이 됐으면 좋겠다.
언급URL : https://stackoverflow.com/questions/28828141/php-mysql-connection-failures-under-heavy-load-through-mysql-sock
'source' 카테고리의 다른 글
| 텍스트 파일에서 문자열을 검색하려면 어떻게 해야 합니까? (0) | 2022.10.06 |
|---|---|
| 불변형 및 가변형 (0) | 2022.10.06 |
| MySQL의 ORDER BY RAND() 함수를 최적화하려면 어떻게 해야 합니까? (0) | 2022.09.23 |
| npm start 실행 시 Start 스크립트 누락 오류 (0) | 2022.09.23 |
| Java에 auto type이 있나요? (0) | 2022.09.23 |