Docker 2.3.0.4 с Devilbox в Windows 10 WSL2 работает чрезвычайно медленно

#php #docker #devilbox

#php #docker #devilbox

Вопрос:

У меня Windows 10 2004, 8-ядерный процессор amd, 12 ГБ оперативной памяти, отлично работает существующий экземпляр wsl2 debian. Я могу запустить обычный веб-стек php-fpm nginx mariadb redis-server с существующим WSL, и производительность отличная. Я читал, что wsl2 и docker теперь намного лучше, и хотел попробовать это.

Я установил docker 2.3.0.4 с wsl2 и установил devilbox в качестве веб-стека.

Я ограничил процесс wls 4 ГБ и 4 процессорами, используя .файл wslconfig, и это все круто и отлично работает.

Что не работает нормально, так это то, что простая страница php (например, <?php echo time(); ?> может отображаться за 15-30 секунд! все, что взаимодействует с базой данных, загружается в течение 90 секунд. о запуске стандартного пустого сайта WordPress не может быть и речи. Запуск того же скрипта / сайта / базы данных в nginx / debian на WSL2 работает отлично.

Я не могу запустить настольное приложение docker после перезагрузки Windows (оно работало до перезагрузки). Установщик icon docker, размещенный на моем рабочем столе, ничего не делает, когда я его запускаю. Я не вижу процесса, появляющегося в диспетчере задач. Кажется, ничего не происходит, это просто не работает. Я могу щелкнуть правой кнопкой мыши значок docker в трее и таким образом попасть на панель инструментов. Я обычно все равно работаю в командной строке, так что это не имеет большого значения, подумал, что стоит упомянуть об этом.

установка devilbox настраивает локальный веб-сервер, и все это работает достаточно хорошо. мне пришлось docker-compose up несколько раз, чтобы заставить его правильно извлекать контейнеры, но тогда у меня ужасный Интернет. веб-интерфейс довольно быстрый, я могу запускать такие инструменты, как phpmyadmin, и они отлично загружаются. Если я попытаюсь восстановить базу данных размером 10 МБ со 100 таблицами, время ожидания истечет, произойдет сбой и запись. Восстановление той же базы данных через оболочку через mysql работает нормально, даже если загрузка моего диска достигает 90% и остается там в течение 5 минут.

любой веб-сервер виртуального хоста, который я создаю, работает ужасно. отображение страниц php занимает около 90 секунд. для отображения страницы с phpinfo() может потребоваться 45-90 секунд белого экрана.

КАК мне выяснить, почему docker настолько плох по сравнению с прямым Linux на WSL2 в той же среде? Я предполагаю, что это как-то связано с битом ввода-вывода диспетчер задач Windows сообщает, что загрузка диска составляет в среднем 2%.

Комментарии:

1. Запрос дополнительной информации. Какие-либо устройства SSD или NVME на хост-сервере MySQL? Опубликовать на pastebin.com и поделитесь ссылками. А) заполните (не отредактированный) my.cnf или my.ini из вашего корневого каталога SSH, текстовые результаты: Б) ПОКАЖИТЕ ГЛОБАЛЬНЫЙ СТАТУС; после минимального времени безотказной работы 24 часа В) ПОКАЖИТЕ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ; Г) ПОКАЖИТЕ ПОЛНЫЙ СПИСОК ПРОЦЕССОВ; Д) заполните отчет MySQLTuner, чтобы получить версию Windows, — github.com/pmachapman/mysqltuner — F) ПОКАЗАТЬ СОСТОЯНИЕ INNODB ДВИЖКА; для анализа настройки рабочей нагрузки сервера предоставить предложения.

Ответ №1:

Я просто думаю, что ваш процессор поколения 2004 не поддерживает ни одну из функций виртуализации.

Docker запускает стек LAMP достаточно быстро при моей посредственной настройке i5.

В течение последних месяцев у меня были некоторые проблемы с производительностью, и я пробовал различные вещи, такие как копирование исходного кода с обычного диска (т. Е. C: он же /mnt/c/ ) внутрь каталога WSL (т. Е. Внутри \WSL$UBUNTUhomeuser ), но у git amp; PhpStorm были различные проблемы, которые трудно диагностировать (хотя было улучшение задержки — и дополнительный бонус, поскольку файловая система на самом деле чувствительна к регистру, поэтому 1: 1 с серверной средой — в противном случае это на NTFS)

Однако самым большим повышением производительности было минимизация количества отображаемых каталогов — изначально я настроил так, чтобы база данных mariadb была доступна для хост-компьютера:

  mariadb:
    image: mariadb:10
    volumes:
      - ./docker/mariadb:/shared # removed this for huge boost
  

Его удаление сделало работу с docker терпимой.

Ответ №2:

Я думаю, что это проблема с объемом docker и общим доступом к файлам Windows. Даже если вы используете WSL2, это не означает, что вы используете файловую систему Linux. Если вы используете файл из системы Windows, например: d:/workspace/myproject , это файл и папка Windows, Windows прочитает и просканирует их перед любым извлечением из docker.

Я нашел решение. Это установка вашего проекта в дистрибутив WSL. Откройте свой дистрибутив Linux, для меня это Ubuntu 18.0, вы начнете с /home/%USER_PATH% , установите свой проект здесь, например: /home/mypc/workspace/myproject

Вы можете удалить свою IDE в WSL в VSCode, это поддерживается extension Remote WSL. Это позволяет вашему проекту работать только в файловой системе Linux, а не совместно с Windows, и намного быстрее