Cygwin из Windows работает очень медленно / медленно


22

Внезапно все команды Cygwin, которые я запускаю из командной строки Windows, имеют задержку ~ 10-20 секунд перед их выполнением, так что Cygwin становится полностью непригодным для использования. Я уже пытался переустановить безуспешно.

Выполнение команд из окна оболочки Bash работает нормально (при запуске Bash я вижу отставание). Удаление всех записей из моей локальной переменной PATH не влияет. Я использую Windows 7 x64 и Cygwin x64 v 1.7.34 (0.285 / 5/3).


не знаю, но это то же самое из cmd.exe, когда вы не запускаете cygwin.bat? НапримерC:\cygwin\bin>.\ls.exe <ENTER>
15:35

Любые обновления, пожалуйста?
yO_

Ответы:


15

Иногда я работаю в домене Windows с тысячами пользователей.

Я не хочу прибегать к каким-либо догадкам. Я бы предпочел, чтобы Cygwin кэшировал информацию о пользователях по мере необходимости. Оказывается, это легко сделать.

Просто запустите cygserverвход.

Чтобы установить это правильно, запустите cygserver-configтолько один раз. Это будет настроено cygserverдля запуска в качестве службы Windows с правильными учетными данными. Сделайте это из окна администратора Cygwin.

$ cygserver-config
Generating /etc/cygserver.conf file

Warning: The following function requires administrator privileges!

Do you want to install cygserver as service?
(Say "no" if it's already installed as service) (yes/no) yes

The service has been installed under LocalSystem account.
To start it, call `net start cygserver' or `cygrunsrv -S cygserver'.

Further configuration options are available by editing the configuration
file /etc/cygserver.conf. Please read the inline information in that
file carefully. The best option for the start is to just leave it alone.

Basic Cygserver configuration finished. Have fun!

Что cygserverдля меня значит ?

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

Конечно, ваш пробег может отличаться, но теперь это мой любимый способ работы. Я должен был сделать это много лет назад.


Это круто! Спасибо, что поделились с нами после столь долгого времени. Теперь доступ к этому файлу через / cygdrive теперь намного быстрее по сравнению с
предыдущим

/usr/bin/cygserver-config: line 181: cygrunsrv: command not found, C:/cygwin64/binНаходится на PATH, работает как администратор ...
Troyseph

1
@Troyseph C:\cygwin64\bin\cygrunsrv.exeсуществует? Вы ошибочно использовали косые черты ( /) в своем %PATH%? Является ли cygrunsrv установлен пакет?
Боббого

Ах, C:\cygwin64\bin\cygrunsrv.exeне существует, установил cygrunsrv: NT/W2K service initiatorпакет и все работает.
Тройсеф,

запустите cygserver-config как в ответе, вообще перестал работать cygwin (процесс не запускается)
user174962

12

Кажется, это связано с аутентификацией. Для меня 40 секунд, чтобы получить что-то для выполнения. Однако после этого процесс создания в этом дереве процессов кажется довольно быстрым.

https://www.cygwin.com/faq.html#faq.using.startup-slow

Так что я

  • Сделал кеш моей локальной аутентификации и моих собственных учетных данных Active Directory (AD)

    $ mkpasswd -l -c >/etc/passwd
    $ mkgroup -l -c >/etc/group
    
  • Сказал Cygwin просто использовать эти два файла

    $ echo 'passwd: files' >/etc/nsswitch.conf
    $ echo 'group: files' >>/etc/nsswitch.conf
    

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

Это всего лишь эскиз - вы, по крайней мере, захотите сохранить резервные копии!

РЕДАКТИРОВАТЬ

Устаревшее. Смотрите мой более свежий ответ на этот вопрос для лучшего (ИМХО) решения.


работал на меня ... и не нужно было устанавливать службу!
Дрой

@bobbogo Ваш ответ внизу для меня. На какой ответ вы ссылаетесь при редактировании в конце? Благодарность!
jpaugh

Полезно знать об этом, хотя он не может объяснить, почему «Все команды cygwin ... имеют задержку ~ 10-20 секунд перед выполнением».
Philwalk

@philwalk Я думаю, что так и есть. Проблема в том, что при запуске Cygwin должен заполнить свою пользовательскую базу данных. Это занимает много времени, когда вы находитесь внутри большого домена windoze. Не каждая команда переносит эту задержку, только первая в любом дереве процессов.
Боббого

2

Прочитайте обновление ниже, это оказалось не проблема.

Я страдал от экстремальной версии этой проблемы, хотя она периодически. Когда проблема существует, все команды занимают от 20 секунд, а в наиболее экстремальных случаях - несколько минут. Это произойдет в течение нескольких дней, а затем исчезнет на несколько дней. Кстати, у меня очень быстрая система с большим количеством DRAM, SSD накопителей и т. Д.

Теперь у меня наконец есть теория-кандидат, которая могла бы что-то объяснить. Я только что обновил Cygwin с помощью setup-x86_64.exe (что я делаю нечасто), и после этого все снова становится очень отзывчивым (буквально в тысячи раз быстрее, чем раньше). Я предполагаю, что rebaseall в конце обновления - вот что изменило ситуацию.

Обновление: ускорение, которое я видел прежде, было очевидно совпадением; когда проблема появилась через месяц, это не помогло. Оказывается, отключение живой защиты Защитника Windows мгновенно устраняет замедление.


2
Отключение живой защиты Защитника Windows мгновенно решило замедление - известная проблема
gavenkoa

1

В качестве примечания, я обнаружил , что я должен был перестроить passwdи groupфайлы после обновления Cygwin. Поскольку медленное поведение происходило снова, автоустановка части установки заняла несколько дней.

Мне также не нужно было изменять nsswitch.conf по умолчанию в моей системе (Windows 10).

Кстати, медленное поведение также проявилось в командной строке Windows и переносимых приложениях. Некоторым портативным приложениям требовалось несколько часов, чтобы создать окно при запуске.


Что вы имеете в виду восстановить их? Просто сделать новые, пустые версии их?
user13743

1

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

Я попробовал вышеуказанное исправление аутентификации. Это не сработало для меня.

Cygwin FAQ сообщает, что Cygwin не любит пробелы в именах пользователей или групп. См. В имени для входа в Windows есть пробел, это вызовет проблемы? ,

В имени моей группы был пробел, поэтому я изменил его в /etc/groupфайле, созданном в исправлении аутентификации, на подчеркивание. Это тоже не сработало.

Другие сообщения о той же самой проблеме сообщили, что это привело к антивирусному сканеру. Я заменил свой существующий антивирусный сканер (System Center Endpoint Protection) на Sophos. Это решило проблему для меня.

Надеюсь, это поможет.


0

У меня была проблема с медленным выполнением сборок некоторое время на Cygwin.

Я был вынужден обновить вчера и столкнулся с проблемой rebaseall просто не в состоянии выполнить. Это заставило меня покопаться в других вещах, и я нашел сообщение о том, что Trusteer Rapport / End Point Protection, как было известно, вызывает проблемы с rebaseall и медленным временем отклика. Поэтому я удалил его обычным способом удаления программ Windows через панель управления.

Затем я сделал rebaseall из интерфейса dash, запущенного от имени администратора.

Так что это означает, (win7) из меню «Пуск» типа тире. Появится ярлык тире, щелкните правой кнопкой мыши, чтобы запустить от имени администратора. Затем, когда это произойдет, выполните:

/ usr / bin / rebaseall -v

Идите на кофе ... Он будет сидеть в течение нескольких секунд, прежде чем он будет отображать вывод, если он сидит и ничего не делает в течение более 5 минут, у вас есть другая проблема.

Это исправило перебазирование, но также значительно увеличило скорость моей сборки. Стоит проверить, установлена ​​ли она у вас, попробуйте удалить ее.


Можете ли вы описать шаги, которые вы предприняли достаточно подробно, чтобы кто-то другой мог их выполнить? … Пожалуйста, не отвечайте в комментариях; отредактируйте  свой ответ, чтобы сделать его более понятным и полным.
Скотт

На windows 10 место для тире было c:\msys64\user\bin\dash.exe. Чтобы запустить его от имени администратора, мне нужно было создать на нем ярлык на рабочем столе. К сожалению, это не
исправило
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.