शेल प्रॉम्प्ट प्राप्त करने में दसियों सेकंड क्यों लगते हैं?


30

यह एक नियमित घटना है, जो सर्वर पर SSH करने के बाद (या यहां तक ​​कि मेरे मैक पर एक टर्मिनल खोलने के बाद), लॉगिन बैनर तुरंत प्रिंट करता है, लेकिन शेल प्रांप्ट को प्रदर्शित होने में ~ 10 सेकंड से एक मिनट तक का समय लगता है। उसके बाद, प्रदर्शन ठीक है और नेटवर्क विलंबता असामान्य नहीं है।

यह एक कम्प्यूटेशनल रूप से कठिन, स्मृति-गहन, या IO- भारी कार्य की तरह प्रतीत नहीं होता है। यह उन सभी अरबों सीपीयू चक्रों के साथ क्या कर रहा है?


8
ssh -v -v -vऔर ur_shell -xविवेकपूर्ण डिबगिंग कदम हो सकता है।

2
क्या आप में बहुत सारी लाइनें हैं .bash_history?
कास्परड सेप

2
अपनी .profile और संबंधित फ़ाइलों को देखें (क्षमा करें, निश्चित नहीं है कि आप किस शेल का उपयोग कर रहे हैं) और अस्थायी रूप से यह देखने के लिए हटा दें कि क्या चीजें बेहतर बनाती हैं। आपके पास संभवतः एक कमांड (एस) है जो टाइमिंग कर रहा है।
theFiddlerWins

3
मोबी डिस्क के सुझाव के लिए वैकल्पिक रूप से, क्या यह अभी भी उतना ही धीमा है अगर आप शेल को शेल के भीतर से शुरू करते हैं? यदि यह धीमी है जब (फिर से) कनेक्ट कर रहा है, लेकिन एक मौजूदा, कनेक्टेड सत्र के भीतर से दूसरा शेल शुरू करते समय तेज है, तो आपको बताएगा कि यह स्वयं शेल नहीं है जो धीमेपन का कारण बन रहा है; यदि यह दो स्थितियों में समान रूप से धीमा है, तो स्टार्टअप पर शेल कुछ करता है, इसमें बहुत समय लग रहा है। किसी भी तरह से आप "शून्य से शेल प्रॉम्प्ट" के किस पहलू के बारे में कुछ सीखते हैं, यह धीमा है।
एक सीवीएन

2
अक्सर यह जीएसएसएपीआई प्रमाणीकरण होने की कोशिश करता है (जो, यदि आप केर्बरोस की दुकान नहीं हैं, तो पूरी तरह से बेकार है)। दूसरी बार, यह DNS रिवर्स लुकअप है।
चार्ल्स डफी

जवाबों:


33

काफी कुछ यहाँ हो रहा है। आप अपने शेल के मैनुअल में अधिकांश उत्तर पा सकते हैं, लेकिन वे आमतौर पर अविश्वसनीय रूप से लंबे और तिरछे होते हैं, इसलिए ...

संभावना है कि आपकी समस्या कुछ चीजों में से एक को उबालती है।

यदि आपकी प्रोफ़ाइल या bashrc में महंगी चीजें हैं, तो उन्हें वापस ट्रिम करने पर विचार करें।

यदि आपकी प्रोफ़ाइल या bashrc रिवर्स DNS लुकअप (प्रॉम्प्ट या कुछ और सेट करने के लिए) का उपयोग करती है, तो DNS को ठीक करें या इसके बजाय hostname का उपयोग करें।

आरंभ करते समय, शेल बहुत सी फाइलें खोलते हैं, अन्य चीजों के बीच। यदि सिस्टम लोड अधिक है, तो यह अक्सर यहां दिखाई देगा।

यदि बैनर पूर्व-प्रमाणीकरण है, तो यह वास्तव में प्रमाणीकरण (pam, LDAP, आदि) भी हो सकता है जो धीमा है।

यह इन चीजों में से कोई भी हो सकता है, हालांकि। प्रांप्ट प्रदर्शित करने से ठीक पहले सामान की एक आश्चर्यजनक मात्रा होती है!


1
जीएसएसएपीआई प्रमाणीकरण (यदि एसएसएच क्लाइंट या सर्वर कॉन्फ़िगरेशन पर बंद नहीं किया गया है) का प्रयास करने के दौरान मैंने एक और ब्लॉक को देखा है। फुल-सिस्टम ट्रेसिंग टूल का उपयोग करना जैसे कि सिसडिग इस तरह के क्रॉस-चिंता मुद्दे की तह तक पहुंचने के लिए संभवतः सबसे अच्छा चांदी की गोली है।
चार्ल्स डफी

+1 मोटा जवाब। इस साइट में लॉगिन के लिए एक अच्छा फ्लोचार्ट है, जो वे फाइलों को निष्पादित / स्रोत, और अन्य जानकारी।
टिम एस।

15
+1। मेरे लिए 99% समय यह रिवर्स डीएनएस लुकअप है।
mpontillo

@ माइक: यहाँ भी - मैं इसे एक के साथ शुरू करने की सलाह दूंगा क्योंकि इसे ठीक करना आसान है। यह मेरे मामले में 100% था।
WoJ

22

यह शायद या तो DNS का इंतजार कर रहा है या LDAP या इस तरह से प्रमाणित करने की कोशिश कर रहा है।

UseDNS no/ Etc / ssh / sshd_config में जोड़ने का प्रयास करें

यदि यह स्थानीय लॉगऑन पर भी करता है, तो जांचें कि आपके द्वारा कॉन्फ़िगर किया गया कोई LDAP सर्वर या DNS सर्वर धीमा या अनुत्तरदायी है।


6

एक संभावना (अन्य उत्तरों से आच्छादित) यह है कि एसएसएच सत्र की स्थापना की प्रक्रिया वही है जहां समय नष्ट होता है।

एक अन्य विकल्प यह है कि SSH सत्र की स्थापना के बाद दूरस्थ मशीन पर चल रहे आपके शेल स्टार्टअप स्क्रिप्ट में कुछ समय लगता है (शायद कुछ टूटे नेटवर्क माउंट तक पहुंचने का प्रयास)। आप इस दूसरी संभावना को निम्नानुसार डीबग कर सकते हैं:

अस्थायी रूप से निम्नलिखित को अपने शीर्ष पर जोड़ें ~/.bash_profile:

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

set -xहर शेल कमांड के लिए कुछ डिबगिंग के बारे में बारी-बारी से मार डाला। PS4चर नियंत्रण कैसे है कि डिबगिंग प्रस्तुत किया है - विशेष रूप से इस मामले में हम प्रयोग datetimestamps जोड़ने के लिए।

फिर आप डिबगिंग आउटपुट के टाइमस्टैम्प का विश्लेषण कर सकते हैं कि यह देखने के लिए कि आपके स्टार्टअप स्क्रिप्ट में कौन सी कमांड बहुत अधिक समय ले रही हैं।


1
सही है और केवल अगर दूरस्थ सत्र खोलने के बाद समस्या होती है। संभावित कारणों में से कई SSH हैंडशेक और प्रमाणीकरण के दौरान हैं।
चार्ल्स डफी

2
बेहतर हुआ। :)
चार्ल्स डफी

3

यदि यह एक उबंटू सर्वर है, तो लॉगिन पैकेज चलने पर हर बार कोई भी पैकेज अपडेट करने पर डिफ़ॉल्ट लॉगिन सेटअप चेक करता है। यदि पैकेज सूचियाँ डिस्क कैश में नहीं हैं, तो यह एक तेज निष्क्रिय डेस्कटॉप पर भी दूसरा या दो ले सकता है।

$ 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

उस "पुनरारंभ आवश्यक" संदेश को उत्पन्न करने के लिए, यह जांचना होगा कि वर्तमान में चल रहा कर्नेल डिफ़ॉल्ट रूप से वर्तमान में स्थापित नहीं है। (यानी वहाँ एक कर्नेल था और मैंने अभी तक रिबूट नहीं किया था।) यह सुरक्षा अपडेट की एक गिनती भी उपलब्ध कराएगा, यदि कोई हो।

मुझे लगता है कि यह उबंटू में प्रवेश करने में प्रमुख मंदी है जिसे हाल ही में पेश किया गया है।

यदि नहीं है कि, तो अपने ~/.bash_profile/ ~/.bashrcसमस्या हो सकती है।

क्या आपने स्वयं ( ssh localhost) से सर्वर में प्रवेश करने की कोशिश की है ? या तुरंत एक 2 बार में लॉग इन करें? (यह देखने के लिए कि सामान भरा होने पर यह बहुत तेज़ है या नहीं।)


2

यह ज्यादातर मामलों में DNS अनुरोध का समयबाह्य है।

कारण: सर्वर क्लाइंट के आईपी पते का उपयोग करके रिवर्स डीएनएस लुकअप का प्रयास करता है, और उसे उत्तर नहीं मिलता है। यदि A, B से जुड़ता है, तो B, A के IP पते को नाम में बदलने की कोशिश करता है।

समाधान: सर्वर की होस्ट फ़ाइल में क्लाइंट का आईपी-पता और नाम दर्ज करें।

समाधान: DNS सर्वर के लिए सभी होस्ट को ज्ञात करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.