簡介
- 該文章適用於配置低,特別是內存低的服務器,在用容器部署服務時有可能會因為容器占用內存過高導致服務掛掉時參考解決(不是運行在容器里的話,同理也可以修改mysql的配置文件限制內存占用)
- docker部署mysql拉下來就能跑,默認配置下mysql的內存占用能達到500-600M,這對低配的1核1G內存的服務器來說是吃不消的
最近用docker部署了個系統,服務器配置是1G的內存,跑了兩個容器,一個wbe服務,一個是mysql,使用的過程中發現服務經常掛,一開始因為運行的服務不太重要並且沒時間處理就沒太在意,每次掛了我就上去restart重啟一下鏡像。后面找了個時間排查了問題,查看了下docker-compose的日志,發現是因為運行的mysql容器占用內存過高導致的,在此記錄下解決過程。
1.排查原因
docker-compose logs
從第1和第2條的error發現是因為mysql容器占用的內存過高,導致mysql掛了(shutdown)

2.解決
上網搜了一下,針對該問題一般的解決方法一般都是
- 1)進入到容器里修改mysql的配置文件,限制mysql容器的內容占用大小
- 2)增大服務器的swap
- 3)也可以在容器啟動的時候增加限制內存的參數
--innodb-buffer-pool-size=64M,詳細百度
結合查詢了其他資料,決定使用第一種解決方案。(增大swap治標不治本,而且增大swap是對系統而言的,swap不建議增大太多,掃描類的服務如果不限制容器的內存很容易爆
步驟如下:
-
1.docker ps

-
2.docker exec -it id bash

-
3.進入/etc/mysql/conf.d目錄后,vim docker.cnf文件
首先需要安裝vimapt-get update apt-get install vim然后vim docker.cnf,編輯后保存退出

最后exit退出容器后,然后docker-compose restart即可

3.優化前后內存占用對比
優化前

優化后,對比還是比較明顯的

4.附:
-
docker容器占用資源查看指令:docker stats

-
服務器內存資源情況查看:free -m/-g/-k #-m/-g/-k是指查看的單位
-
為什么調整內核用內存,盡量不用swap的參考
-
網友們的討論


