現象:
- 在運行docker容器的時候,當運行多個容器,或者其中一個容器占用內存比較大的時候,另一個容器中的任務會掛掉。
- 比如某一個容器同時運行 Hadoop + Hive,另一個容器運行 Mysql ,就會導致Mysql容器自動掛掉.
排查原因:
- 使用:docker stats 查看容器動態資源使用情況時,如下:
可以看到,h01表示Hadoop的master節點,且這個容器中還安裝、運行着 Hive,占用內存為: 1.347G/1.939G,且Mysql也占用了一些內存,他們是共享這2G的內存的,已經接近最大內存上限了。
如上圖,可以看到頻繁的進行內存交換,資源釋放。
解決辦法:
- 這是由於電腦分配給 Docker的內存太少了,默認是分配 2G的內存給 Docker,需要將電腦分配給Docker的內存設置更大一點。
- 先將 docker中運行的容器都停掉 :docker stop container_id
- docker -> Dashboard -> Settings -> Resources
如上圖所示,將 Memory 調為 4G,將Swap 調為 2G,點擊 Apply & Restart即可。
- 重啟之后,看到docker容器的資源如下:
可見,最大內存已經變為 3.84G了。
反饋結果:
- 當設置后,再啟動 Hadoop 、Hive 、Mysql后,能正常運行Hive程序,且資源使用情況如下:
可見,容器的內存使用超出 2G了,之前的 2G限制確實滿足不了使用需求。