2016-10-24 6 views
0

저는 게임 서버 (플레이어 정보, 저장 데이터, 물건)를 MySQL (InnoDB)과 함께 NodeJS를 실행하고 있습니다. 서버는 HTTP (S) 기반이므로 아무 것도 실시간으로 볼 수 없습니다. 아래의 그래프에서 볼 수 있듯이MySQL 쿼리 시간에 이상한 스파이크가 발생했습니다.

내가 이상한 스파이크가 있어요 당신과 함께 최대 응답 시간을 볼 수 있습니다 응답 시간 그래프에

(첫번째 그래프/초 요청/초와 마지막 그래프는 쿼리입니다) 자주색 및 평균 응답 시간은 파란색으로 표시됩니다. 심지어 10 ~ 20k 봉우리의 평균값은 50 ~ 100ms이며 요청의 95 %를 유지합니다.

나는 주변을 파고 들었고 느린 쿼리가 특별한 것이 없음을 발견했습니다. 일반적으로 savedata (~ 2kb의 BLOB) 또는 사용자 이름과 같이 수정하는 플레이어 프로필 업데이트로 쿼리를 업데이트하십시오. 조인이나 그와 같은 어떤 것도 없습니다. 우리는 100K 행 이하의 테이블에 대해 이야기하고 있습니다.

서버는 4 코어 및 7GB RAM을 사용하여 MySQL 5.7을 사용하는 우분투 14.04의 Azure에서 실행됩니다.

Server monitor stuff

MySQL의 설정 :

innodb_buffer_pool_size=4G 
innodb_log_file_size=1G 
innodb_buffer_pool_instances=4 
innodb_log_buffer_size=4M 
query_cache_type=0 
tmp_table_size=64M 
max_heap_table_size=64M 
sort_buffer_size=32M 
wait_timeout=300 
interactive_timeout=300 
innodb_file_per_table=ON 

편집 : 그것은 문제가 SQL 쿼리 전에 결코 MySQL의 성능하지만 Node.js를 성능이라고 밝혀졌다. 여기에 더 많은 정보 : Node.js multer and body-parser sometimes extremely slow

+0

디스크 처리량도 확인할 수 있습니까? 때로는 디스크도 사용 중일 수 있으며 이로 인해 스파이크가 발생할 수 있습니다. 또한 이것은 무거운 시스템을 작성하는 경우 잠금 대기, 교착 상태 등과 같은 백그라운드에서 많은 일이 발생할 수 있습니다. 이러한 행위는 이러한 종류의 결과로 이어질 수 있습니다. – Aruna

+0

IO쪽에 이상한 일이 없습니다. 서버가 백엔드보다 많이 실행되고 있지 않습니다. –

+0

자원을 사용하고있는 시간당 cronjob은 고정 간격으로 보입니다. 어쩌면 logrotation 또는 무언가 – verhie

답변

1

이 swappiness를 확인 (램 사용량을 극대화 0 MySQL의 기계로 가정) : swappiness 경우

> sysctl -A|grep swap 
vm.swappiness = 0 

단지 풀 버퍼의 RAM의 7 세대 및 4 세대로, 컴퓨터가 교체됩니다 0이 아닙니다.

스왑 그래프를 게시하고 메모리를 사용할 수 있습니까? 4G 버퍼는 7G RAM의 "오버 엣지"입니다. 8G 숫양의 경우, OS에 MySQL의 현명한 + 2G가있는 모든 것에 + 1G를 사용하므로 3G를 제공 할 것입니다.

또한 트랜잭션 로그 파일에 대해 1G가 있으며 두 개의 로그 파일이 있다고 가정합니다. 큰 파일을 작성하는 데 너무 많은 글이 있습니까? 이 가이드를 사용할 수 있습니다 : https://www.percona.com/blog/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/

+0

60으로 설정하고 0으로 변경했습니다. 어떻게 영향을 주는지 알 수 있습니다. –

+0

기본 설정으로 시작하여 많은 가이드를 사용하여 최적화하려고했습니다. 하나는 로그가 버퍼 크기의 25 %가되어야하므로 1G로갔습니다. –

+0

나는 MySQL을 5.5 -> 5.7에서 업그레이드했고 VM을 14GB RAM으로 약간 더 빠른 CPU로 업그레이드했다. 나는 현재 오래된 conf (4G 버퍼 두 배의 RAM이 있더라도)로 서버를 실행 중이다. Swappiness는 이제 0이고 "available memory"는 10G에 표시됩니다. 가까운 장래에 최소 100 배 이상의 트래픽이 발생할 것으로 예상되며이 서버로 당황하고 있습니다. –

관련 문제