Jest to rodzaj regularnego zdarzenia, że po SSHing do serwera (lub nawet otwarciu terminala na moim komputerze Mac) baner logowania jest drukowany natychmiast, ale wyświetlenie monitu powłoki zajmuje około 10 sekund do minuty. Po tym wydajność jest w porządku, a opóźnienie sieci nie jest niczym niezwykłym.
Nie wydaje się to zadaniem trudnym obliczeniowo, wymagającym dużej ilości pamięci lub dużym obciążeniem IO. Co robi z tymi wszystkimi miliardami cykli procesora?
ssh
performance
shell
jacobbaer
źródło
źródło
ssh -v -v -v
iur_shell -x
mogą to być ostrożne kroki debugowania..bash_history
?Odpowiedzi:
Mogło się tu wydarzyć kilka rzeczy. Większość odpowiedzi znajdziesz w podręczniku powłoki, ale są one zazwyczaj bardzo długie i ukośne, więc ...
Możliwe, że twój problem sprowadza się do jednej z kilku rzeczy.
Jeśli Twój profil lub bashrc zawierają drogie rzeczy, rozważ przycięcie ich z powrotem.
Jeśli Twój profil lub bashrc używają odwrotnego wyszukiwania DNS (aby ustawić monit lub coś takiego), napraw DNS lub użyj nazwy hosta.
Powłoki otwierają wiele plików, między innymi podczas inicjowania. Jeśli obciążenie systemu jest wysokie, często się tu pojawia.
Jeśli baner jest wstępnie uwierzytelniany, może to być również powolne uwierzytelnianie (pam, LDAP itp.).
Może to jednak nie być żadna z tych rzeczy. Zaskakująca ilość rzeczy dzieje się tuż przed wyświetleniem monitu!
źródło
Prawdopodobnie czeka albo na DNS, albo próbuje się uwierzytelnić przez LDAP.
Spróbuj dodać
UseDNS no
do / etc / ssh / sshd_configJeśli robi to również przy logowaniu lokalnym, sprawdź, czy skonfigurowane serwery LDAP lub DNS są wolne lub nie odpowiadają.
źródło
Jedną z możliwości (objętych innymi odpowiedziami) jest to, że sam proces konfigurowania sesji SSH jest miejscem, w którym czas jest tracony.
Inną alternatywą jest to, że skrypty startowe powłoki działające na zdalnym komputerze po ustanowieniu sesji SSH mają coś, co zajmuje dużo czasu (być może próba uzyskania dostępu do zepsutego podłączenia sieciowego). Tę drugą możliwość możesz debugować w następujący sposób:
Tymczasowo dodaj na górze
~/.bash_profile
:Te
set -x
obroty na jakiś debugowania dla każdego polecenia powłoki wykonane. TePS4
kontrole zmienne, jak to jest przedstawione debugowanie - specjalnie w tym przypadku używamydate
, aby dodać znaczniki czasu.Następnie możesz przeanalizować sygnatury czasowe danych wyjściowych debugowania, aby zobaczyć, które polecenia w skryptach startowych trwają zbyt długo.
źródło
Jeśli jest to serwer Ubuntu, domyślna konfiguracja logowania sprawdza, czy można aktualizować pakiety przy każdym uruchomieniu powłoki logowania. Jeśli listy pakietów nie znajdują się w pamięci podręcznej dysku, może to zająć sekundę lub dwie nawet na szybkim bezczynnym pulpicie.
Aby wygenerować ten komunikat „wymagane ponowne uruchomienie”, musiał sprawdzić, czy aktualnie uruchomione jądro nie jest domyślnym jądrem aktualnie zainstalowanym. (tj. było jądro i jeszcze się nie zrestartowałem). Spowoduje to również wydrukowanie liczby dostępnych aktualizacji zabezpieczeń, jeśli takie istnieją.
Myślę, że jest to główne spowolnienie logowania do Ubuntu, które zostało wprowadzone niedawno.
Jeśli nie to, problem może stanowić Twój
~/.bash_profile
/~/.bashrc
.Czy próbowałeś zalogować się na serwerze z samego siebie (
ssh localhost
)? Lub logujesz się od razu po raz drugi? (Aby sprawdzić, czy jest dużo szybciej, gdy rzeczy są buforowane).źródło
W większości przypadków jest to limit czasu żądania DNS.
Przyczyna: Serwer próbuje odwrócić wyszukiwanie DNS przy użyciu adresu IP klienta i nie otrzymuje odpowiedzi. Jeśli A łączy się z B, B próbuje przekonwertować adres IP A na nazwę.
Obejście: Wprowadź adres IP i nazwę klienta do pliku hosts na serwerze.
Rozwiązanie: powiadom wszystkie serwery DNS o serwerze DNS.
źródło