Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве описывается, как устранять проблемы в WSL и определять, откуда они приходят.
Краткое примечание по архитектуре
Чтобы определить, что вызывает проблему, необходимо узнать, где она находится в стеке.
Если двоичный файл Linux вызывается в WSL, он (приблизительно) проходит через эти слои, каждый из них может быть местом, из которого происходит ошибка:
graph TD;
id1["Linux binary in userspace"]-->id2["Linux distro"];
id2["Linux distro"]-->id3["WSL's stack"];
id4["WSL's stack"]-->id5["Physical hardware"];
Мы рассмотрим этот стек по порядку и покажем, как определить, является ли источник ошибок из этого раздела.
Двоичный файл Linux в пользовательском пространстве
Сначала необходимо проверить, является ли это ошибкой, вызванной самим двоичным файлом Linux. Самый простой способ это проверить — посмотреть, воспроизводится ли эта ошибка на реальном компьютере с Linux (предпочтительно на физическом оборудовании), или запустить полный Ubuntu в Hyper-V для качественного сравнения. Если возникает ошибка так же на реальной машине под управлением Linux, то мы знаем, что это либо двоичный файл Linux, либо дистрибутив.
Кроме того, можно выполнить strace команду, чтобы определить, что происходит. Эта команда показывает системные вызовы Linux, которые выполняет двоичный файл Linux, и вы можете определить, к чему он пытается получить доступ и в каких случаях может произойти ошибка. В этом руководстве не будет приведено полное руководство по отладке strace стеков (или в противном случае это было бы слишком долго), поэтому рассмотрим пример:
Пользователь замечает, что команда xeyes в WSL зависает, но на Linux системе она работает нормально. При выполнении strace xeyes показывается, что команда зависает на системном openat вызове. Это означает, что ядро Linux зависает при попытке выполнить вызов openat, и указывает на то, что проблема заключается не в самом двоичном файле.
Что делать, если проблема находится в двоичном файле Linux
Двоичные файлы Linux, присутствующие в WSL, предоставляются соответствующими владельцами и не принадлежат непосредственно Microsoft. Если в двоичном файле Linux возникла проблема, сообщите ему владельцу этого двоичного файла напрямую.
Дистрибутив Linux
Некоторые ошибки также могут возникнуть из самого дистрибутива Linux. Дистрибутивы Linux в WSL фактически представляют собой лишь коллекцию двоичных файлов Linux, поэтому применимы те же шаги по устранению неполадок, что и указано выше. Однако дистрибутив Linux отвечает за ключевые возможности, такие как диспетчер пакетов, что может значительно повлиять на взаимодействие двоичных файлов друг с другом.
Чтобы устранить эту проблему, вы должны использовать те же методы, что и выше, чтобы узнать, воспроизводится ли это в Linux, и использовать strace, чтобы определить, что вызывает сбой (или другие коды ошибок) и пытаться определить, поступает ли он из конкретного двоичного файла Linux. Если этот двоичный файл принадлежит дистрибутиву, это проблема дистрибутива Linux.
Что делать, если проблема в дистрибутиве Linux
Подобно истории с Linux-бинарниками, дистрибутивы WSL предоставляются их соответствующими разработчиками. Пожалуйста, сообщите об ошибке непосредственно в затронутый дистрибутив Linux.
Стек WSL
Затем ошибка может исходить из самого механизма WSL. Если проблема не воспроизводится на Linux, работающем непосредственно на оборудовании, или что-либо на уровне машины дает сбой, это указывает на то, что проблема возникает в WSL. Ниже приведены распространенные пути сбоя и способы его определения и сбора журналов:
Сбои или ошибки при запуске WSL.wsl.exe
Наиболее очевидной ошибкой здесь является ошибка, возникающая непосредственно из wsl.exe, например, как в этой проблеме на GitHub. В этом случае соберите журналы WSL, которые воспроизводят проблему и отправьте её в репозиторий WSL на GitHub.
WSL зависает
Еще одна распространенная ошибка заключается в том, что WSL зависает и не отвечает на какие-либо команды. В этом случае сообщите о сбое процесса WSL, выполнив предложенный процесс. Вы можете принудительно вызвать сбой и собрать дамп памяти, открыв диспетчер задач -> Процессы, > щелкнув правой кнопкой мыши VmmemWSL -> Создать файл дампа памяти. Включите этот аварийный дамп и создайте задачу в репозитории WSL на GitHub.
Ошибки сети.
Снова убедитесь, что это не проблема с бинарным файлом Linux. Кроме того, если это возможно, убедитесь, что это не универсальная проблема виртуализации или VPN, попробуйте Hyper-V виртуальную машину на этом компьютере, чтобы узнать, имеет ли она ограниченные сетевые возможности. Если эта проблема сохраняется только в WSL, отправьте проблему в репозитории WSL GitHub.
Другие проблемы.
Если вы сталкиваетесь с другой ошибкой WSL, которую считаете связанной с самой WSL, включите журналы и подайте заявку на ее запись в репозиторий WSL на GitHub.
Погружение в логи WSL
Вы можете открыть журналы WSL, чтобы узнать точную ошибку. Для этого сначала установите анализатор производительности Windows .
Затем, когда у вас есть журналы WSL (собранные из этих инструкций), возьмите созданный и распакуйте файл .zip. Откройте полученную папку и найдите файл под названием: logs.etl. Дважды щелкните на этом файле, чтобы открыть его в Windows Performance Analyzer.
После открытия приложения выполните следующие действия.
- Щелкните "Системное действие", чтобы развернуть представление
- Перетащите поле "Универсальные события" в верхней части главного окна
- Найдите серию "Microsoft.Windows.Lxss.Manager" и нажмите на стрелку, чтобы выбрать её.
Оттуда можно просмотреть все диагностические события, которые создаются из WSL. Один из наиболее интересных будет называться "VerboseLog" и будет предоставлять дополнительные сведения о точном расположении ошибки и информации об этом.
Дополнительные ресурсы
Распространенные проблемы и решения доступны на странице документации по устранению неполадок WSL, поэтому проверьте наличие проблем, которые могут возникнуть. Кроме того, перейдите к репозиторию WSL GitHub или любой поисковой системе и выполните поиск проблемы или коды ошибок там, чтобы узнать, попадает ли другие пользователи в ту же проблему.
Windows Subsystem for Linux