vm.max_map_count [65530] is too low 問題解決(WSL 二、Docker Desktop)

環境

  • Windows 10 20H2
  • Docker Desktop for Windows 2.4.0.0
  • WSL 2
  • Distro: Ubuntu 20
  • Image:sebp/elk latest

背景

基於Spring Cloud 和 Spring Cloud Alibaba 構建微服務架構,想要總體穩定運行,提高易用性和管控性。所須要集成和整合的內容就很是多,例如:Nacos、ELK等等。git

特殊狀況下,須要本身在本機搭建環境,而且運行,其複雜度可想而知。爲了下降複雜度,在本身電腦上,經過安裝Docker Desktop,並採用WSL 2的方式,運行相關組件的Docker Container。github

如何安裝使用,請看個人文章:docker

(1) Windows 10 2004 (20H1) 安裝 Docker Desktop for Windows (2.3.0.2) 以 WSL 2 方式運行容器
(2) Windows 10 將 Docker Desktop for Windows(WSL 2 方式)文件存儲移出C盤放置到其它目錄bootstrap

問題

微服務架構,離不開日誌中心,常規的日誌中心,均採用ELK來進行數據的存儲、查詢和展示。爲了圖方便,直接PULL sebp/elk(ELK的集成鏡像)來運行ELK環境。vim

在Window 10 的 WSL 2 環境中運行sebp/elk,在控制檯中會出現如下錯誤:架構

waiting for Elasticsearch to be up (1/30)
waiting for Elasticsearch to be up (2/30)
waiting for Elasticsearch to be up (3/30)
waiting for Elasticsearch to be up (4/30)
waiting for Elasticsearch to be up (5/30)
waiting for Elasticsearch to be up (6/30)
waiting for Elasticsearch to be up (7/30)
waiting for Elasticsearch to be up (8/30)
waiting for Elasticsearch to be up (9/30)
waiting for Elasticsearch to be up (10/30)
waiting for Elasticsearch to be up (11/30)
waiting for Elasticsearch to be up (12/30)
waiting for Elasticsearch to be up (13/30)
waiting for Elasticsearch to be up (14/30)
waiting for Elasticsearch to be up (15/30)
waiting for Elasticsearch to be up (16/30)
waiting for Elasticsearch to be up (17/30)
wating for Elasticsearch to be up (18/30)
waiting for Elasticsearch to be up (19/30)
waiting for Elasticsearch to be up (20/30)
waiting for Elasticsearch to be up (21/30)
waiting for Elasticsearch to be up (22/30)
ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
ERROR: Elasticsearch did not exit normally - check the logs at /var/log/elasticsearch/elasticsearch.log
waiting for Elasticsearch to be up (23/30)
waiting for Elasticsearch to be up (24/30)
waiting for Elasticsearch to be up (25/30)
waiting for Elasticsearch to be up (26/30)
waiting for Elasticsearch to be up (27/30)
waiting for Elasticsearch to be up (28/30)
waiting for Elasticsearch to be up (29/30)
waiting for Elasticsearch to be up (30/30)
Couldn't start Elasticsearch. Exiting.

錯誤堆棧中會出現如下關鍵信息:elasticsearch

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解決

主要問題就是:Linux Distro Virtual Memory Areas 默認的vm.max_map_count值是65530,過小不足以支撐ELK的運行。須要將該值增大到至少262144。微服務

方法一

進入到你所使用的WSL 2 distro中(本人使用的是Ubuntu 20)操作系統

  1. 以管理員身份進入
~$ sudo -i
  1. 編輯sysctl.conf,增長參數
~$ vim /etc/sysctl.conf (須要是root帳戶)

~$ vm.max_map_count=262144 (文件最後添加一行)
  1. 重啓
~$ sysctl -p (重啓生效)
該方法有一個問題,一旦系統重啓或者Docker Desktop重啓。就須要從新手動執行以上命令,比較麻煩。

方法二

  1. 打開Window 10 的CMD
  2. 執行如下命令:
wsl -d docker-desktop
echo 262144 >> /proc/sys/vm/max_map_count
經過這個方法,即便操做系統重啓,參數仍然有效。

對於Linux只停留在使用階段,若是有更好的方式也請告訴我。.net

參考資料:

(1):https://github.com/docker/for-win/issues/5202

相關文章
相關標籤/搜索