2015-02-09 4 views
30

Запуск любого приложения cygwin принимает более минуты на Windows 8.1 x64. Не имеет значения, либо я начинаю mintty из ярлыка, либо cygwin.bat или ls.exe или bash.exe из папки bin. Каждый из них будет медленным.Запуск очень медленный для всех приложений cygwin

После Баша или mintty начал они работают довольно быстро:

$ time for i in {1..10} ; do bash -c "echo Hello" ; done 
Hello 
... 
Hello 

real 0m1.273s 
user 0m0.060s 
sys  0m1.181s 

шагов, которые я пробовал:

  • переустановил и попытался как Cygwin и cygwin64 несколько раз
  • (версия 2.864).
  • Запущен в качестве администратора
  • Пробовал работать в режиме совместимости с Win7
  • Disabled «Автоматически определять настройки» для LAN as in this reply
  • Добавлены 127.0.0.1 localhost cygdrive wpad хостов as in same reply
  • Установить антивирус для выключенного состояния
  • Проверены, что завершение Баша не установлен (не /etc/bash_completion.d папки)
  • Отключено всех съемных дисков в устройстве Manager (только система и SSD HDD данные слева)
  • Пробовали работать с пустым etc/profile.d папки
  • Пробовал работать с пустым etc/bash.bashrc файлом

Пожалуйста, совет, как еще я могу найти причину.

P.S. - У меня есть две разные системы, ноутбук и рабочий стол с Win 8.1 x64. Эта проблема на 100% воспроизводима для обоих.

Кроме того, если я начинаю bash через несколько секунд после входа в систему, он начинается немедленно.

+0

Когда адаптированная сеть отключена, cygwin запускается через мгновение. Таким образом, он пытается подключиться к некоторому сетевому ресурсу. –

+0

Сетевой монитор показывает массовую сетевую активность для приложений cygwin. Они получают доступ к некоторым машинам из моей сети в порты LDAP через TCP и LDAPMessage. –

+0

У меня такая же проблема. Я попробовал как решение 1, так и решение 2 ниже, и ни одна из них не разрешила проблему. Кстати, когда я запускаю «mkpasswd», я получаю чрезвычайно длинный список в своей организации. – Hugues

ответ

54

В конце концов я нашел причину этой проблемы, но я все еще не уверен, почему. Cygwin очень хорошо работает для других людей в одной и той же среде.

Причина: В начале каждого приложения cygwin он пытается получить учетные данные, как описано в файле etc/nsswitch.conf. По какой-то причине для моей учетной записи требуется много времени, так как она связывается с несколькими контроллерами домена Active Directory через LDAP.

Решение 1: Вы можете сохранить текущий пользователь и группу в etc/passwd и etc/group файлов и установить cygwing, чтобы проверить их перед активным каталогом.

  1. Start mintty.exe и ждать, пока она не откроется
  2. Выполнить mkpasswd -c и сохранить его вывод в etc/passwd файл (вы должны создать его, вывод должен быть один линия)
  3. Run mkgroup -c и сохранить его вывод к etc/group файл (вы должны создать его, вывод должен быть один линия)
  4. Открыть etc/nsswitch.conf и написать

nsswitch.conf:

passwd: files # db 
group: files # db 

Теперь ваш cygwin должен начинаться с неба.

Решение 2: Существует специальное CygServer приложение, поставляется с Cygwin, который может быть запущен как служба NT или в качестве простого процесса (просто запустите usr/sbin/cygserver.exe). Он кэширует учетные данные и распространяет их на каждый следующий процесс cygwin , а cygserver работает.

Добавьте его для запуска или запуска его перед сеансом cygwin, и вы хорошо - запуск cygserver потребует времени, но каждый следующий процесс cygwin начнется немедленно.

Это ваш случай? Я хочу поделиться своими действиями по расследованию, чтобы вы могли проверить, ваш случай тот же, что и мой.

  • Установить MS Network Monitor, так как он может показывать трафик определенного процесса. Запустите его как администратор.
  • Новая вкладка захвата и нажмите Начало (вам не нужно добавлять фильтры или еще что-либо).
  • Start mintty, и вы увидите, что это соединение в Netmon: netmon-screenshot
  • Вы увидите список mintty соединений в виде дерева на левой и TCP и LDAP кадров на право после выбора на этих соединений.
  • Кроме того, вы можете получить имя этих удаленных компьютеров по IP. Запустите nbtstat -a 8.8.8.8 в командной строке (замените 8.8.8.8 одним из IP-адресов netmon).

Углубляясь: Я до сих пор играю с etc/nsswitch.conf файлом, чтобы получить учетные данные локальных или, возможно, кэшированные те, так что будет работать быстрее без cygserver. Но еще не повезло.

+3

Замечания по выпуску последней версии Cygwin выделяют это изменение. Смотрите https://cygwin.com/ml/cygwin-announce/2015-02/msg00009.html – roaima

+0

Привет, я нашел эту тему и хотел сказать, что у меня также есть похожие проблемы, которые сводят меня с ума. Прежде чем задать вопрос, я хотел бы получить некоторые идеи о том, сталкивается ли я с тем же вопросом. В принципе, я запускаю W7, подключенный к домену моей компании. После недавнего обновления cygwin у меня действительно много времени для запуска терминалов cygwin, они занимают от 1 до 2 минут, чтобы подняться! Это действительно расстраивает. Я начну читать поток, предложенный в предыдущем комментарии. –

+1

@JoseCifuentes Я рекомендую вам попробовать ** solution 2 ** (который просто запускает 'usr/sbin/cygserver.exe', дождитесь загрузки и запуска любого другого приложения cygwin параллельно). Если это помогает - используйте решение 1, так как требуется больше времени, но вылечите проблему. –

17

Вот что сработало для меня.

1) Запустите терминал Cygwin, а затем запустите следующие две строки.

mkpasswd -c > /etc/passwd 
mkgroup -c > /etc/group 

2) Измените файл "/etc/nsswitch.conf", содержащий следующие две строки.

passwd: files # db 
group: files # db 

Done!

6

Если вы находитесь в сети с большим каталогом AD, mkpasswd займет много времени (несколько дней в моем случае). Поэтому рассмотрите, используя:

mkpasswd -c -l > /etc/passwd 
mkgroup -c -l > /etc/group 

-l,--local [machine] Print local user accounts of \"machine\", 
         from local machine if no machine specified. 
         Automatically adding machine prefix for local 
         machine depends on settings in /etc/nsswitch.conf. 
+0

Требуется ли столько времени с флагом -c только для вас? Кроме того, не забудьте отредактировать nsswitch.conf, как указано в других ответах. –

+0

Работал для меня .. Спасибо – peetTechs

2

добавив 'C: \ cygwin64 \ bin' к пути, который работал для меня.

Смежные вопросы