Команды Cygwin из CMD медленны; от bash быстро
Я использую команды Cygwin из моего приглашения Windows CMD в течение нескольких месяцев без проблем. В течение последних нескольких дней каждый раз, когда я вызываю команду Cygwin (например, ls
), команда занимает несколько секунд, чтобы "загрузить" до ее фактического запуска. Если я попробую одну и ту же команду из приглашения bash, она немедленно запускает ( "загружает" ).
В Cygwin FAQ упоминается, что сетевые диски в PATH могут вызвать проблемы, поэтому я пробовал некоторые перестановки моей переменной PATH
и сетевого подключения. Ниже "full PATH
" означает мою первоначальную настройку пути; "short PATH
" означает путь только с каталогом bin Cygwin. Время сообщается с помощью команды time
.
Результаты синхронизации для ls
Подключено к сети:
- Запустите
ls
внутри bash
: 0.124 с
- Запустите
ls
внутри CMD (полный PATH
): 41.29 s
- Запустите
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
перед выполнением Cygwin ls
и после выполнения (пока он застопорен). Я делал это несколько раз и обнаружил одну строку от каждого прогона, которая постоянно появлялась во время задержки:
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
Ответы
Ответ 1
A в Cygwin FAQ затрагивает медленное время запуска. Недавно Cygwin переключился на использование запросов Active Directory для проверки подлинности, вместо использования плоских файлов. Изменение значений по умолчанию в /etc/nsswitch.conf
из
passwd: files db
group: files db
к
passwd: files
group: files
пропускает поиск AD. Мои команды Cygwin теперь быстрее.