Чому для отримання запиту на оболонку потрібно десятки секунд?


30

Це своєрідне регулярне явище, що після SSHing на сервері (або навіть відкритті терміналу на моєму Mac) банер для входу друкується негайно, але для появи запиту оболонки потрібно ~ 10 секунд до хвилини. Після цього продуктивність працює нормально, а затримка в мережі не є незвичайною.

Це не здається обчислювально складним, об'ємним для пам’яті чи важким завданням для IO. Що це стосується всіх цих мільярдів циклів процесора?


8
ssh -v -v -vі ur_shell -xможе бути розсудливим кроком налагодження.
триг

2
Чи багато у вас рядків .bash_history?
kasperd

2
Перегляньте свій .profile та пов’язані з ним файли (вибачте, не впевнений, яку оболонку ви використовуєте) та видаліть тимчасово, щоб побачити, чи покращує це ситуація. Напевно у вас є команди, які вичерпуються.
TheFiddlerWins

3
Як варіант пропозиції Moby Disk, чи все-таки це однаково повільно, якщо ви запускаєте саму оболонку з оболонки? Якщо це повільно при (повторному) з'єднанні, але швидке при запуску другої оболонки з існуючого підключеного сеансу, це скаже вам, що причиною сповільнення стає не сама оболонка; якщо вона однаково повільна в двох ситуаціях, то те, що оболонка робить при запуску, займає багато часу. У будь-якому випадку ви дізнаєтесь про те, який аспект "від нуля до підказки оболонки" повільний.
CVn

2
Часто це спроба пройти аутентифікацію GSSAPI (яка, якщо ви не магазин Kerberos, швидше за все, марна). В іншому випадку це зворотні пошуки DNS.
Чарльз Даффі

Відповіді:


33

Тут може відбуватися досить багато речей. Більшість відповідей ви можете знайти в посібнику з оболонкою, але вони, як правило, неймовірно довгі і косі, тому ...

Можливо, ваша проблема зводиться до однієї з кількох речей.

Якщо у вашого профілю або bashrc є дорогі речі, подумайте про їх обрізку назад.

Якщо ваш профіль або bashrc використовують зворотний пошук DNS (щоб встановити підказку або щось подібне), виправте DNS або використовуйте ім'я хоста.

Оболонки відкривають безліч файлів, серед іншого, під час ініціалізації. Якщо завантаження системи велике, воно часто з’являється тут.

Якщо банер має попередню аутентифікацію, це може бути фактично повільною аутентифікацією (pam, LDAP тощо).

Однак це може бути ніщо. Дивовижна кількість речей трапляється прямо перед тим, як відображати підказку!


1
Ще один, з якого я бачив блок протягом значного часу, - це спроба аутентифікації GSSAPI (якщо не вимкнено ні на клієнті SSH, ні на конфігурації сервера). Використання повносистемного інструменту відстеження, такого як sysdig - це, мабуть, найкраща срібна куля, яка доступна для вирішення цього питання з питань перехресних проблем.
Чарльз Даффі

+1 Грунтовна відповідь. На цьому веб-сайті є хороша блок-схема для входу, файли, які вони виконують / джерело, та іншу інформацію.
Тім С.

15
+1. 99% часу для мене це зворотний пошук DNS.
mpontillo

@Mike: те саме тут - я б рекомендував почати саме з цього, оскільки це легко виправити. У моєму випадку це було 100%.
WoJ

22

Ймовірно, або чекає DNS, або намагається пройти автентифікацію через LDAP або інше.

Спробуйте додати UseDNS noдо / etc / ssh / sshd_config

Якщо це також робиться на локальних логотипах, перевірте, чи які-небудь сервери LDAP або DNS-сервери, які ви налаштували, повільні або невідповідальні.


6

Одна з можливостей (охоплена іншими відповідями) полягає в тому, що сам процес налаштування сеансу SSH - це те, де втрачається час.

Іншою альтернативою є те, що ваші сценарії запуску оболонки, що працюють на віддаленій машині після встановлення сеансу SSH, потребують тривалого часу (можливо, спроба отримати доступ до якогось зламаного монтажу мережі). Ви можете налагодити цю другу можливість наступним чином:

Тимчасово додайте наступне у верхній частині свого ~/.bash_profile:

set -x
PS4='+ $(date "+%s.%N")\011 '

У set -xчерзі на деякі налагодження для кожної команди оболонки виконується. В PS4контролю змінних , як видається , що налагодження - саме в цьому випадку ми будемо використовувати , dateщоб додати мітки.

Потім ви можете проаналізувати часові позначки виводу налагодження, щоб побачити, які команди у ваших сценаріях запуску забирають занадто багато часу.


1
Правда, якщо і лише в тому випадку, якщо проблема сталася після відкриття віддаленого сеансу. Багато потенційних причин є під час рукостискання та аутентифікації SSH.
Чарльз Даффі

2
Набагато покращився. :)
Чарльз Даффі

3

Якщо це сервер Ubuntu, налаштування входу за замовчуванням перевіряє, чи будь-які пакети оновлюються кожного разу при запуску оболонки входу. Якщо списки пакетів не містяться в кеш-диску, це може зайняти секунду-дві навіть на швидкому простою робочому столі.

$ ssh localhost 
Welcome to Ubuntu 15.04 (GNU/Linux 3.19.0-26-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

*** System restart required ***
Last login: Sat Sep 12 01:38:38 2015 from localhost

Щоб генерувати повідомлення про необхідний перезапуск, потрібно було перевірити, що ядро, що працює в даний момент, не є встановленим на даний момент ядром. (тобто було ядро, і я ще не перезавантажувався.) Він також надрукує кількість наявних оновлень безпеки, якщо такі є.

Я думаю, що це головне уповільнення входу в систему Ubuntu, яке було представлено нещодавно.

Якщо це не так, то проблема може бути вашою ~/.bash_profile/ ~/.bashrc.

Ви спробували увійти на сервер від себе ( ssh localhost)? Або входити вдруге відразу? (Щоб побачити, чи це набагато швидше, коли вміст кешується.)


2

У більшості випадків це час очікування запиту DNS.

Причина: Сервер намагається здійснити зворотний пошук DNS, використовуючи IP-адресу клієнта, і не отримує відповіді. Якщо A підключається до B, B намагається перетворити IP-адресу A в ім'я.

Вирішення: введіть IP-адресу та ім’я клієнта у файл хостів сервера.

Рішення: повідомте всіх хостів на DNS-сервері.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.