준호씨의 블로그

mysql 이 자꾸 죽음. InnoDB: Cannot allocate memory for the buffer pool 본문

개발이야기/호스팅관리

mysql 이 자꾸 죽음. InnoDB: Cannot allocate memory for the buffer pool

준호씨 2020. 1. 5. 00:18
반응형

/var/logs/mysql/error.log 에 아래와 같은 에러를 남기면서 mysql 이 종종 죽어 버리는 문제가 발생 했습니다.

2019-12-31T04:05:27.893941Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool

좀 더 자세한 로그는

2019-12-31T04:05:27.893917Z 0 [ERROR] InnoDB: mmap(137428992 bytes) failed; errno 12
2019-12-31T04:05:27.893941Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2019-12-31T04:05:27.893955Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2019-12-31T04:05:27.893967Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2019-12-31T04:05:27.893986Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2019-12-31T04:05:27.893997Z 0 [ERROR] Failed to initialize builtin plugins.
2019-12-31T04:05:27.894005Z 0 [ERROR] Aborting

2019-12-31T04:05:27.897360Z 0 [Note] Binlog end
2019-12-31T04:05:27.897454Z 0 [Note] Shutting down plugin 'CSV'
2019-12-31T04:05:27.897949Z 0 [Note] /usr/sbin/mysqld: Shutdown complete

아무래도 서버 사양이 낮다 보니 램도 512MB 인데, apache, mysql, docker, mongodb 등등 여러가지를 돌리다 보니 결국 무리가 온 거 같습니다.

innodb buffer pool 메모리 할당에 실패 한다고 하니 설정으로 좀 낮춰 보았습니다.

/etc/mysql/my.cnf 파일에서 [mysqld] 부분에 아래 내용을 추가 했습니다.

innodb_buffer_pool_size = 16M

아무 설정을 하지 않은 상태에서는 128MB 입니다.

아래 방법으로 확인 할 수 있구요.

mysql> SELECT @@innodb_buffer_pool_size/1024/1024;
+-------------------------------------+
| @@innodb_buffer_pool_size/1024/1024 |
+-------------------------------------+
|                        128.00000000 |
+-------------------------------------+
1 row in set (0.00 sec)

설정 변경우 재시작 하니 아래 처럼 바뀌었습니다.

mysql> SELECT @@innodb_buffer_pool_size/1024/1024;
+-------------------------------------+
| @@innodb_buffer_pool_size/1024/1024 |
+-------------------------------------+
|                         16.00000000 |
+-------------------------------------+
1 row in set (0.01 sec)

다만 buffer pool size 가 낮아져서 서비스 속도가 느려진다거나 또 다른 문제가 생길까봐 좀 걱정이 들긴 한데요. 일단 좀 더 지켜 봐야 되겠습니다.

 

여전히 mysqld 의 메모리 점유율이 20% 가 넘는 상황이긴 한데요. 호스팅을 좀 더 업그레이드 해야 되나 고민입니다. DB호스팅이라도 어디 싼데다가 하나 만들까 싶기도 하구요.

top - 00:17:03 up 91 days, 10:56,  7 users,  load average: 2.22, 0.92, 0.36
Tasks: 126 total,   1 running,  78 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.5 sy,  0.0 ni, 99.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   493464 total,   102072 free,   270312 used,   121080 buff/cache
KiB Swap:   520188 total,   227392 free,   292796 used.   209596 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 6524 mysql     20   0 1495328 105144   4240 S   0.0 21.3   0:01.17 mysqld
 6695 root      20   0  386796  19744  14420 S   0.0  4.0   0:00.03 apache2
 6711 www-data  20   0  394444  18152   9384 S   0.0  3.7   0:00.05 apache2
 ...
반응형
Comments