Как уменьшить потребление процесса vmmem?

Я установил докер в Windows, который использует WSL2 в качестве бэкэнда. Однако, поскольку это делается, процесс называется vmmemпохоже, постоянно потребляет много вычислительных ресурсов. Я побежал docker stop $(docker ps -aq)убить все работающие контейнеры (их было 12 - упс), что значительно улучшило проблему. Однако даже после закрытия докера vmmemпо-прежнему занимает ~1,5 - 2 ГБ оперативной памяти и ~20% ЦП. Поскольку больше нет запущенных контейнеров, не следует потребление ресурсов vmmemбыть минимальным? Как уменьшить потребление vmmem процесс?

14 ответов

Решение

Даниэль Б. в деньгах. Чтобы выключить Vmmem, просто войдите в Powershell или любой другой терминал, который вы хотите использовать с правами администратора, и введите cmd wsl --shutdown, когда закончите играть в wsl1/2.

Я редактирую конфигурацию WSL, чтобы ограничить использование памяти, как указано здесь.

      # turn off all wsl instances such as docker-desktop
wsl --shutdown
notepad "$env:USERPROFILE/.wslconfig"

Установите нужные значения для ядра процессора и памяти:

      [wsl2]
memory=3GB   # Limits VM memory in WSL 2 up to 3GB
processors=2 # Makes the WSL 2 VM use two virtual processors

vmmemдаже после выключения докера будет работать от нескольких секунд до 1 минуты, прежде чем полностью отключится. Поэтому попробуйте закрыть свои контейнеры и докер, и он должен исчезнуть достаточно скоро.

В принятом ответе говорится о выключении WSL (подсистема Windows для Linux), что имеет смысл, если вы действительно открыли и установили дистрибутив, но поскольку вы упомянули о Docker, я предполагаю, что ты vmmem просто показывает использование только контейнеров докеров.

Вот хорошее объяснение от надежного человека: https://devblogs.microsoft.com/oldnewthing/20180717-00/?p=99265

Перезапустите WSL2, выполнив следующую команду в PowerShell, щелкнув правой кнопкой мыши и запустив ее в режиме администратора:

      Restart-Service LxssManager

Память используется Linux для кэширования файлов. Это можно увидеть вbuff/cacheразделfreeкоманда. Чтобы удалить кеш, просто запуститеecho 3 | sudo tee /proc/sys/vm/drop_caches.

Я только что создал%UserProfile%\.wslconfigфайл с этими двумя строками и оставил все остальное нетронутым. Все работало нормально.

      [wsl2]
memory=8GB

Я выполнил полное выключение сразу после добавления файла для WSL, чтобы получить новые настройки.

      $ wsl --shutdown

Дополнительную информацию от Microsoft см. здесь: Настройка дополнительных параметров в WSL.

Если вы хотите остановить процесс vmmem, попробуйте этот способ

  1. откройте меню «Пуск» -> найдите «Диспетчер Hyper-V», просто набрав
  2. остановить виртуальную машину -> щелкнуть правой кнопкой мыши -> выключить

На тот момент, когда я посмотрел на этот вопрос, было около двух лет, и я только сейчас столкнулся с проблемами. Возможно, это связано с включением Kubernetes внутри Docker для Windows (я в этом не уверен).

Мне удалось завершить работу подсистемы Windows для Linux (WSL) с помощьюwsl --shutdownкоманда, которая освободила память, но отключила использование Docker.

Итак, я обновил свой~/.wslconfigфайл (он же%USERPROFILE%\.wslconfig), как предложено для уменьшения памяти. Я считаю, что это помогло.

Позже выяснилось, что моя подсистема WSL устарела и не обновляется (по умолчанию) с помощью обновлений Windows, потому что я отключилReceive updates for other Microsoft products when you update Windows.

Поэтому я включил это и запустилwsl --update(в оболочке администратора), а моя версия WSL была обновлена ​​от 16.03.21 (Kernel Version 5.4.72) по сегодняшний день (02.05.22) (Kernel Version 5.10.102.1).

Я надеюсь, что это тоже поможет.

Согласно этой теме: https://github.com/microsoft/WSL/issues/6982, использование параметра памяти в .wslconfig не всегда работает.

Решение, кажется, заключается в следующем:

  1. Добавьте это в\Users\<USERPROFILE>\.wslconfig(создайте файл, если он не существует)
      [wsl2]
guiApplications=false
  1. Перезапустите wsl, запустивwsl --shutdownв powershell или командной строке (появляется сообщение о завершении работы, но на самом деле он останавливает и перезапускает все запущенные дистрибутивы wsl)

В моем случае у меня не установлен WSL, но есть Docker. Я некрасиво завершил процесс докера, а через некоторое время заметил, что vmmem использует много CPU. Windows не позволила убить процесс vmmem.

Мне пришлось снова открыть Docker и аккуратно закрыть его с помощью значка на панели задач. После этого vmmem больше не работал.

Помимо WSL, виновником также может быть подсистема Android.

Может ли это быть связано с этим????

Что касается моих проблем, связанных с высокой загрузкой ЦП и оперативной памяти vmmem, я испробовал все решения, которые мог найти здесь и в других местах для WSL2. Похоже, что для некоторых типов задач WSL2 съедает вашу память, а не выплевывает ее при выполнении...

Исключения для использования WSL 1 вместо WSL 2:

  • Использование памяти WSL 2 увеличивается и уменьшается по мере ее использования. Когда процесс освобождает память, она автоматически возвращается в Windows. Однако на данный момент WSL 2 еще не возвращает кэшированные страницы в памяти обратно в Windows до тех пор, пока экземпляр WSL не будет выключен. Если у вас длительные сеансы WSL или вы имеете доступ к очень большому количеству файлов, этот кеш может занимать память в Windows.https://docs.microsoft.com/en-us/windows/wsl/compare-versions

Для этой конкретной задачи мне не нужен WSL2... Сейчас я пробую WLS1...

Я буду публиковать новости о том, как идут дела...

Обновление: кажется, переход на WSL1 решает эту проблему при запуске многих подпроцессов. Я уже давно прошел момент, когда он перегружает ОЗУ и останавливается.

У меня была такая же проблема с Windows 10 версии 20H2 и сборкой ОС 19042.1466, и создание файла «.wslconfig», как сказали ребята, решило мою проблему. Но меня беспокоит: является ли это решение похожим на подавление памяти для контейнеров и замедляет работу моего контейнера? Есть ли какие-либо идеи относительно этого использования памяти? Это утечка памяти? Или Docker/WSL2 делает только резервирование памяти? По крайней мере, до сих пор я не сталкивался с этой проблемой в Windows 11 версии 22H2 и сборке ОС 22621.1555.

откройте cmd от имени администратора

      net stop vmcompute
Другие вопросы по тегам