Cygwin z Windows jest bardzo wolny / opóźniony

22

Nagle wszystkie polecenia Cygwin, które uruchamiam z wiersza poleceń systemu Windows, mają około 10-20 sekundowe opóźnienie przed ich wykonaniem, dzięki czemu Cygwin staje się całkowicie bezużyteczny. Próbowałem już zainstalować bez powodzenia.

Wykonywanie poleceń z poziomu okna powłoki Bash działa dobrze (podczas uruchamiania Bash widzę opóźnienie). Usunięcie wszystkich wpisów z mojej lokalnej zmiennej PATH nie ma wpływu. Używam Windows 7 x64 i Cygwin x64 v 1.7.34 (0.285 / 5/3).

85fce
źródło
nie wiem, ale czy to samo z cmd.exe, gdy nie uruchamiasz cygwin.bat? np.C:\cygwin\bin>.\ls.exe <ENTER>
barlop
Wszelkie aktualizacje proszę?
yO_

Odpowiedzi:

15

Czasami pracuję w domenie Windows z tysiącami użytkowników.

Nie chcę się zgadywać. Wolę Cygwin buforować informacje o użytkowniku w miarę potrzeb. Okazuje się, że jest to łatwe do zrobienia.

Po prostu uruchom cygserverprzy logowaniu.

Aby ustawić to poprawnie, uruchom cygserver-configtylko raz. Spowoduje to skonfigurowanie cygserverdo działania jako usługa systemu Windows z prawidłowymi poświadczeniami. Zrób to z okna administratora 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!

Co mi robi cygserver?

Zajrzyj do dokumentacji na stronie Cygwin . Zasadniczo robi to buforowanie przez użytkownika, a także zapewnia, że ​​IPC działa między wszystkimi procesami Cygwin .

Twój przebieg może się oczywiście różnić, ale teraz jest to mój ulubiony sposób pracy. Powinienem był to zrobić lata temu.

bobbogo
źródło
To jest świetne! dzięki za udostępnianie po tak długim czasie. Korzystanie z tego pliku przez / cygdrive jest teraz znacznie szybsze w porównaniu do wcześniejszego
85fce
/usr/bin/cygserver-config: line 181: cygrunsrv: command not found, C:/cygwin64/binjest włączony PATH, działa jako administrator ...
Troyseph,
1
@Troyseph Czy C:\cygwin64\bin\cygrunsrv.exeistnieje? Czy błędnie użyłeś ukośników ( /) w swoim %PATH%? Czy pakiet cygrunsrv jest zainstalowany?
bobbogo
Ach, C:\cygwin64\bin\cygrunsrv.exenie istnieje, zainstalowałem cygrunsrv: NT/W2K service initiatorpakiet i wszystko działa.
Troyseph,
uruchom cygserver-config jak w odpowiedzi, w ogóle przestał działać cygwin (proces się nie uruchamia)
user174962
12

Wydaje się, że ma to związek z uwierzytelnianiem. Dla mnie 40 sekund, aby dostać coś do wykonania. Po tym jednak tworzenie procesu w tym drzewie procesów wydaje się dość szybkie.

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

Więc ja

  • Utworzyłem pamięć podręczną lokalnego uwierzytelnienia i własne poświadczenia usługi Active Directory (AD)

    $ mkpasswd -l -c >/etc/passwd
    $ mkgroup -l -c >/etc/group
    
  • Powiedziałem Cygwinowi, żeby używał tych dwóch plików

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

Zabiłem wszystkie procesy Cygwina i zacząłem od nowa. Wszystko działa teraz ładnie i szybko. Usunę ten hack przy każdej aktualizacji pliku Cygwin DLL i zobaczę, jak sobie radzę.

To tylko szkic - przynajmniej będziesz chciał zachować kopie zapasowe!

EDYTOWAĆ

Przestarzałe. Zobacz moją najnowszą odpowiedź na to pytanie, aby uzyskać lepsze (IMHO) rozwiązanie.

bobbogo
źródło
pracował dla mnie ... i nie musiałem instalować usługi!
Droj
@bobbogo Twoja odpowiedź jest dla mnie na dole. Do jakiej odpowiedzi odnosisz się na końcu w swojej edycji? Dzięki!
jpaugh
dobrze o tym wiedzieć, chociaż nie może wyjaśnić, dlaczego „Wszystkie polecenia cygwin ... mają opóźnienie rzędu ~ 10-20 sekund przed ich wykonaniem”.
philwalk
@philwalk Myślę, że tak. Problem polega na tym, że podczas uruchamiania Cygwin musi zapełnić bazę danych użytkowników. To zajmuje dużo czasu, gdy jesteś w dużej domenie windoze. Nie każde polecenie ma opóźnienie, tylko pierwsze w dowolnym drzewie procesów.
bobbogo
2

Przeczytaj poniższą aktualizację, okazało się, że to nie jest problem.

Cierpię na skrajną wersję tego problemu, chociaż jest on sporadyczny. Gdy problem występuje, wszystkie polecenia trwają od 20 sekund, aw najbardziej ekstremalnych przypadkach kilka minut. Będzie to miało miejsce przez kilka dni, a następnie zniknie na kilka dni. BTW, mam niezwykle szybki system z dużą ilością pamięci DRAM, SSD itp.

W końcu mam teorię kandydatów, która może wyjaśnić różne rzeczy. Właśnie zaktualizowałem Cygwin za pomocą setup-x86_64.exe (co robię rzadko), a potem wszystko znów jest bardzo responsywne (dosłownie 1000 razy szybciej niż wcześniej). Domyślam się, że rebaseall pod koniec aktualizacji zrobił różnicę.

Aktualizacja: przyspieszenie, które widziałem wcześniej, było najwyraźniej zbiegiem okoliczności; gdy problem pojawił się miesiąc później, to nie rozwiązało problemu. Okazuje się, że wyłączenie ochrony na żywo Windows Defender natychmiast rozwiązało spowolnienie.

philwalk
źródło
2
wyłączenie ochrony na żywo programu Windows Defender natychmiast rozwiązało spowolnienie - znany problem
gavenkoa
1

W przypisie właśnie odkryłem, że muszę zaktualizować pliki passwdi grouppo aktualizacji Cygwin. Poniewaz powolne zachowanie dzialalo sie ponownie, wykonanie instalacji przez autorebase trwało kilka dni.

Nie musiałem również modyfikować domyślnego pliku nsswitch.conf w moim systemie (Windows 10).

Nawiasem mówiąc, powolne zachowanie ujawniło się również w wierszu polecenia systemu Windows i aplikacjach przenośnych. Po uruchomieniu niektóre przenośne aplikacje potrzebowały kilku godzin.

jfdawson
źródło
Co masz na myśli, odbudowując je? Po prostu tworzyć nowe, puste wersje?
user13743,
1

W ten sposób objawił mi się ten problem. Po pierwsze, powiedzmy 20, polecenia wprowadzone po znaku zachęty Cygwin były szybkie, ale nagle stały się boleśnie powolne.

Próbowałem powyższej poprawki uwierzytelnienia. Nie działało to dla mnie.

Cygwin FAQ informuje, że Cygwin nie lubi spacji w nazwach użytkowników lub grup. Zobacz Nazwa logowania do systemu Windows ma spację, czy spowoduje to problemy? .

Nazwa mojej grupy zawierała spację, więc zmieniłem ją w /etc/grouppliku wygenerowanym w poprawce uwierzytelnienia na podkreślenie. To też nie działało.

Inne posty dotyczące tego samego problemu informowały, że ma to miejsce w przypadku skanera antywirusowego. Mój dotychczasowy skaner antywirusowy (System Center Endpoint Protection) zastąpiłem Sophos. To rozwiązało problem.

Mam nadzieję, że to pomoże.

Desmond Campbell
źródło
0

Przez pewien czas miałem problem z powolnym wykonywaniem kompilacji na cygwin.

Byłem zmuszony zaktualizować wczoraj i natknąłem się na problem rebaseall po prostu nie wykonujący. Zmusiło mnie to do zagłębienia się w inne rzeczy i znalazłem raport, o którym wiadomo, że Trusteer Rapport / End Point Protection powoduje problemy z rebaseall i spowalnia czas reakcji. Więc usunąłem go za pomocą zwykłej metody odinstalowywania programów Windows za pomocą Panelu sterowania.

Następnie wykonałem rebaseall z interfejsu deski rozdzielczej uruchomionego jako administrator.

Oznacza to, że (win7) z menu startowego wpisz myślnik. Pojawi się skrót myślnika. Kliknij prawym przyciskiem myszy, aby uruchomić się jako administrator. Następnie, gdy jest włączony, wykonaj:

/ usr / bin / rebaseall -v

Idź na kawę ... Siedzi przez kilka sekund, zanim wyświetli wynik, jeśli siedzi i nie robi nic przez więcej niż 5 minut, masz inny problem.

To naprawiło rebaseall, ale także znacznie zwiększyło szybkość mojej kompilacji. Warto sprawdzić, czy masz zainstalowany, spróbuj go usunąć.

Obrabować
źródło
Czy potrafisz opisać kroki, które podjąłeś na tyle szczegółowo, aby pozwolić komuś innemu na ich wykonanie? … Proszę nie odpowiadać w komentarzach; edytuj  swoją odpowiedź, aby była jaśniejsza i bardziej kompletna.
Scott
W systemie Windows 10 lokalizacja kreski była c:\msys64\user\bin\dash.exe. Aby uruchomić go jako administrator, musiałem utworzyć do niego skrót na pulpicie. Niestety nie naprawiło to mojego wolnego
cygwina