Команды Cygwin из CMD медленные; из bash быстро

Я использую команды Cygwin из командной строки Windows CMD в течение нескольких месяцев без проблем. В течение последних нескольких дней каждый раз, когда я вызываю команду Cygwin (например, ls), команде требуется несколько секунд для «загрузки», прежде чем она действительно запустится. Если я попробую ту же команду из командной строки bash, она немедленно запустится («загрузится»).

В Часто задаваемые вопросы о Cygwin упоминается, что сетевые диски в PATH могут вызывать проблемы, поэтому я попробовал некоторые перестановки моей переменной PATH и сетевого подключения. Ниже «полный PATH» означает мой исходный путь; «короткий PATH» означает путь только с каталогом bin Cygwin. Время сообщается с помощью команды time.

Результаты тайминга для ls

Подключено к сети:

  • Прогон ls в течение bash: 0,124 с
  • Запуск ls в CMD (полный PATH): 41,29 с.
  • Запуск ls в CMD (короткий PATH): 38,56 с.

Отключено от сети:

  • Прогон ls в пределах bash: 0,125 с
  • Запуск ls в CMD (полный PATH): 0,17 с.
  • Запуск ls в CMD (короткий PATH): 0,19 с

Результаты для cygcheck

Я пробежал cygcheck -s и заметил:

Warning: There are multiple cygwin1.dlls on your path

хотя это может быть связано с запуском cygcheck из каталога Cygwin bin. Я полностью удалил и переустановил Cygwin и все еще вижу ту же проблему.

Результаты от netstat

Я запустил netstat -a -n перед выполнением ls Cygwin и после выполнения (пока он завис). Я делал это несколько раз и нашел по одной строке из каждого прогона, которая постоянно появлялась во время задержки:

  UDP    127.0.0.1:55030        *:*                    

Номер порта менялся от теста к тесту.

strace результатов

Я запустил Cygwin strace по команде ls. Большая часть задержки приходится на такие вызовы, как:

11685  886560 [main] ls 10020 pwdgrp::fetch_account_from_windows: line: <xxxx>

и

12684  899244 [main] ls 10020 cyg_ldap::fetch_ad_account: No entry for (objectSid=\00\00\00\00) in xxxx DC=xxxx,DC=xxxx,DC=xxxx

person tbhartman    schedule 13.02.2015    source источник
comment
Это рабочий компьютер; Я не могу отключить антивирус (даже для проверки).   -  person tbhartman    schedule 13.02.2015
comment
Я проверил, что все каталоги в моем неизмененном PATH существуют и являются локальными.   -  person tbhartman    schedule 13.02.2015
comment
Итак, теперь отключение от сети делает все быстрее? Это не согласуется с результатами, которые вы изначально опубликовали. Рассмотрите возможность использования Process Monitor (доступен на веб-сайте MS), чтобы проверить, что делает процесс во время длительной задержки.   -  person Harry Johnston    schedule 14.02.2015
comment
@HarryJohnston, да, я, должно быть, делал что-то не так в первый раз. Это также только тогда, когда я подключен к сети моей компании (то есть из дома, когда я подключен через VPN). Возможно, это связано с антивирусом. Попробую Process Monitor.   -  person tbhartman    schedule 14.02.2015
comment
Большинство корпоративных сетей, предоставляющих VPN-туннель, запрещают раздельное туннелирование (т. е. маршрут по умолчанию изменяется корпоративной VPN). конечная точка при подключении туннеля).   -  person Bill_Stewart    schedule 14.02.2015
comment
Как и Process Monitor, запустите netstat -a -n в течение периода задержки и найдите соединения в состоянии SYN_SENT. Я видел симптомы, в целом похожие на эти, когда программное обеспечение пытается проверить сертификат SSL, но доступ к сети блокируется внешним брандмауэром. (Обычно, если у вас вообще нет сетевого подключения, попытка немедленно завершается неудачей, так что это будет согласованным.) Не обязательно использовать SSL, любой другой доступ к сети будет иметь аналогичный эффект, например, если Cygwin пытается самостоятельно обновление или что-то в этом роде.   -  person Harry Johnston    schedule 15.02.2015
comment
Несколько интересных обсуждений: cygwin.com/faq/faq.html#faq. using.startup-slow и cygwin.com/ml/cygwin/ 2015-02/msg00195.html   -  person tbhartman    schedule 19.02.2015
comment
Эта проблема относится только к Windows 7 или к Windows 10 тоже?   -  person Hope    schedule 03.04.2019


Ответы (1)


раздел часто задаваемых вопросов Cygwin посвящен медленному запуску. Cygwin недавно перешел на использование поиска Active Directory для аутентификации, а не на использование плоских файлов. Изменение значений по умолчанию в /etc/nsswitch.conf с

passwd:   files db
group:    files db

to

passwd:   files
group:    files

пропускает поиск AD. Мои команды Cygwin теперь снова работают быстро.

person tbhartman    schedule 19.02.2015
comment
Странный; Интересно, зачем вообще нужно что-то искать? Команда ls по умолчанию не показывает группу и владельца, IIRC. - person Harry Johnston; 19.02.2015
comment
Вы спасатель жизни! Я бы проголосовал дважды, если бы мог :-) - person ysap; 09.09.2016
comment
Я получаю следующую ошибку после изменения nsswitch.conf: Ошибка: не удалось разветвить дочерний процесс: нет доступных терминалов (-1). - person Santosh Tiwari; 05.07.2017
comment
Вместо того, чтобы внести изменения, предложенные в этом ответе, я перешел к связанному разделу в cygwin и следовал инструкциям (использовал вариант 2). Теперь это быстрее. :) - person Santosh Tiwari; 14.07.2017