MySQL (MariaDB)이 자주 충돌합니다


9

최근에 MySQL을 실행하는 기존 서버를 MariaDB 5.5를 실행하는 새로운 VPS로 마이그레이션했습니다. 서버에서 너무 많이 실행하지 않고 (몇몇 PHP 사이트 만) 사용 가능한 메모리가 정상인 것처럼 보이지만 DB는 며칠에 한 번씩, 몇 시간 내에 다른 시간에 계속 충돌합니다.

로그에 다음과 같은 오류가 나타납니다.

131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)
131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 96681984 bytes)
131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 72499200 bytes)
131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 54362112 bytes)
131231  1:43:04 InnoDB: The InnoDB memory heap is disabled
131231  1:43:04 InnoDB: Mutexes and rw_locks use GCC atomic builtins
131231  1:43:04 InnoDB: Compressed tables use zlib 1.2.3.4
131231  1:43:04 InnoDB: Using Linux native AIO
131231  1:43:04 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137756672 bytes) failed; errno 12
131231  1:43:04 InnoDB: Completed initialization of buffer pool
131231  1:43:04 InnoDB: Fatal error: cannot allocate memory for the buffer pool
131231  1:43:04 [ERROR] Plugin 'InnoDB' init function returned error.
131231  1:43:04 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
131231  1:43:04 [Note] Plugin 'FEEDBACK' is disabled.
131231  1:43:04 [ERROR] Unknown/unsupported storage engine: InnoDB
131231  1:43:04 [ERROR] Aborting

131231  1:43:04 [Note] /usr/sbin/mysqld: Shutdown complete

나는 도움이되지 않는 InnoDB 힙에 대한 my.cnf 설정을 가지고 놀았습니다. 관련 부분은 다음과 같습니다.

innodb_buffer_pool_size = 128M
innodb_log_buffer_size  = 8M
innodb_file_per_table   = 1
innodb_open_files       = 400
innodb_io_capacity      = 400
innodb_flush_method     = O_DIRECT

여유 RAM이 "충분한"것으로 보이고 스왑도 사용할 수 있습니다.

root@phoenix:~# free -m
             total       used       free     shared    buffers     cached
Mem:           994        923         71          0         19        417
-/+ buffers/cache:        486        508
Swap:         1023        131        892

이 문제를 어떻게 해결하고 해결할 수 있습니까? 나는 단서에 대한 웹간을 닦았지만 아무것도 도움이되지 못했습니다.


1
메모리가 충돌하기 직전의 모습은 무엇입니까? [ERROR] mysqld: Out of memory확인 외모는 강한 힌트를 좋아한다. 커널 (OOM)이 mysql을 종료하기로 결정했는지 확인하기 위해 시스템 로그를 확인 했습니까?
Zoredache

충돌 전과 후에 사용 된 파일 핸들과 사용 된 메모리 ( top매 간격마다 명령 덤프 )를 기록하여 충돌의 원인을 파악해야합니다. mysql (mariadb)과 같은 다른 서비스가 서버에서 실행됩니까?
Ashwin kumar


performance_schema = off를 사용해보십시오.

답변:


9

도움이 되길 바랍니다.

시험

performance_schema = off

에서 [mysqld]구성 섹션.

https://mariadb.com/resources/blog/starting-mysql-on-low-memory-virtual-machines/


이것을 시도해보십시오. 며칠 동안 서비스를 제공 한 후 일관되게 계속 작동하려면 다시보고하겠습니다.
Matt Hamann

꽤 도움이 된 것 같습니다. 100 % 해결되지는 않았지만 이것을 조정 한 후 꽤 잘 작동했습니다. 감사.
Matt Hamann
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.