लिनक्स सिस्टम समय अस्थायी रूप से कूदता है


11

मैंने कुछ (हार्डवेयर) सर्वरों में एक अजीब प्रणाली के समय को बदलते व्यवहार को देखा: /var/logs/syslogप्रत्येक लॉग संदेश से पहले की तारीख का समय कभी-कभी एक यादृच्छिक रूप में बदल जाता है और अगले संदेश में वापस सामान्य हो जाता है, जैसे कि निम्न:

Feb 22 2018 09:09:30 ...  
Feb 22 2018 09:09:32 ...  
Jan 13 2610 15:37:42 ...  
Feb 22 2018 09:09:33 ...  
Feb 22 2018 09:09:34 ...  

उदाहरण के रूप में, तारीख के समय का अचानक परिवर्तन सैकड़ों साल दूर हो सकता है।

मैं पुष्टि कर सकता हूं कि अजीब समय टिकटों वाले लॉग संदेश किसी विशेष प्रक्रिया से नहीं आते हैं - यह सिर्फ हर एक के लिए यादृच्छिक रूप से हो सकता है।

और 2 असामान्य समय परिवर्तनों के बीच की अवधि कुछ मिनटों से कुछ घंटों के बीच भिन्न होती है (हालांकि, मुझे संदेह है कि असामान्य समय परिवर्तन अधिक बार हो सकता है, लेकिन उनमें से कई सिसलॉग में प्रकट नहीं होते हैं, क्योंकि यह हर सेकंड लॉग नहीं लिख रहा है)।

इसके अलावा, चूंकि यह एक से अधिक सर्वरों पर होता है, इसलिए मुझे लगता है कि यह एक हार्डवेयर समस्या नहीं है।

सेवर के बारे में अधिक जानकारी: वे एक नियंत्रक और कुछ गणना नोड्स के साथ एक ओपनस्टैक इंस्टॉलेशन हैं। प्रत्येक सर्वर में ntp सेवा चल रही है। नियंत्रक को अपनी स्वयं की हार्डवेयर घड़ी से समय लेने के लिए कॉन्फ़िगर किया गया है, और गणना नोड सर्वर नियंत्रक से समय सिंक करते हैं। ध्यान दें कि प्रत्येक सर्वर में अपनी गति से असामान्य समय परिवर्तन होता है - ऐसा लगता है कि "गलत समय" ntp के माध्यम से नियंत्रक से सिंक्रनाइज़ नहीं है।

मुझे संदेह था कि कंप्यूट नोड्स पर अतिथि सिस्टम (वर्चुअल मशीन) उनके मेजबान सिस्टम के समय को प्रभावित कर सकते हैं। लेकिन यह स्पष्ट नहीं कर सकता है कि किसी भी वर्चुअल मशीन को नहीं चलाने के दौरान नियंत्रक को एक ही समस्या क्यों है।

मुझे यह पता लगाने के लिए एक विधि की आवश्यकता है: सिस्टम समय को किसने बदला और यह कैसे होता है?


क्या दिखाया गया टाइमस्टैम्प वास्तविक टाइमस्टैम्प है? क्या आपके पास दिखाने के लिए और उदाहरण हैं?
Kusalananda

क्या प्रश्न ब्लेड सर्वर में सर्वर हैं? यदि ऐसा है, तो ब्लेड चेसिस प्रबंधन इकाई व्यक्तिगत सर्वर ब्लेड की घड़ियों को सिंक करने का प्रयास कर सकती है। ज्ञात घड़ी हार्डवेयर बग को देखने के लिए वास्तविक सर्वर मॉडल को जानना आवश्यक होगा।
टेल्कोएम

क्या आप एचडब्ल्यू समय की निगरानी भी कर सकते हैं - hwclock? अगर यह उस समय भी बदल जाता है ...
जारोस्लाव कुचेरा

3
ध्यान दें कि syslogd बस उस संदेश की सामग्री को लिखता है जिसे जो भी प्रक्रिया से उपयुक्त लॉग फ़ाइल में भेजा गया था; टाइमस्टैम्प वास्तव में संदेश के भीतर भेजा जाता है, यह syslogd द्वारा उत्पन्न नहीं होता है। तो शायद कुछ संदेशों को दूषित कर रहा है, या यदि यह एक प्रकार की प्रक्रिया है, तो शायद यह प्रक्रिया छोटी गाड़ी के संदेश भेज रही है। FYI करें प्रारूप RFC3164 द्वारा वर्णित है; दिनांक / समय भाग सादे ASCII में भेजा जाता है।
wurtel

कृपया मल्टी-पोस्ट किए गए डुप्लिकेट से सभी जानकारी को सुपरयूज़र . com/ questions / 1298404 पर प्रश्न में डालें ।
JdeBP

जवाबों:


1

संबंधित पहलू कर्नेल संस्करण और बूट प्रक्रिया के आरंभ से ही ये पंक्तियाँ हैं:

kernel: Fast TSC calibration using PIT
...
kernel: Calibrating delay loop (skipped), value calculated using timer frequency..
...
kernel: Switching to clocksource tsc

YMMV और आप TSC या PIT का उपयोग नहीं कर सकते हैं

AFAIK यह एक बग है जो आपके CPU के कम से कम एक घड़ी के सिंक से बाहर होने के कारण होता है, आपके मामले में शायद बहुत तेजी से चल रहा है।

इसे चलाकर पुष्टि करना आसान होना चाहिए:

for cpu in {0..8} ; do taskset -c $cpu date ; done

जो dateप्रत्येक सीपीयू के खिलाफ चलेगा (यह मानते हुए कि आपके पास 8 कोर / धागे हैं)। अगर मेरा अनुमान सही है, तो आपके एक सीपीयू में लगातार गलत समय होगा।

अगर ऐसा है तो आपको सबसे पहले कर्नेल को अपग्रेड करने की कोशिश करनी चाहिए और अगर वह काम नहीं करता है, तो घड़ियों के बूट पैरामीटर के साथ फिडेल (यह मानकर x86-64):

clocksource=    Override the default clocksource
                Format: <string>
                Override the default clocksource and use the clocksource
                with the name specified.
                Some clocksource names to choose from, depending on
                the platform:
                [all] jiffies (this is the base, fallback clocksource)
                [ACPI] acpi_pm
                ...
                [X86-64] hpet,tsc

इसका आउटपुट भी देखें:

cat /sys/devices/system/clocksource/clocksource*/available_clocksource

0

ऐसा लगता है कि आपके नियंत्रक सर्वर पर हार्डवेयर घड़ी समय के बारे में जानकारी का एक स्थिर संसाधन नहीं है। आपको अपने नियंत्रक को अधिक विश्वसनीय परमाणु घड़ी के साथ सिंक करने के लिए कॉन्फ़िगर करना चाहिए।

यह वह कमांड है जिसका उपयोग आप अपनी हार्डवेयर घड़ी को अपडेट करने के लिए कर सकते हैं: hwclock -s

यह सभी देखें:

   -s, --hctosys
          Set the System Time from the Hardware Clock.

          Also set the kernel's timezone value to the local timezone as indicated by the TZ environment variable and/or /usr/share/zoneinfo, as tzset(3) would interpret them.  The obsolete tz_dsttime field of the kernel's time‐
          zone value is set to DST_NONE.  (For details on what this field used to mean, see settimeofday(2).)

          This is a good option to use in one of the system startup scripts.

   -w, --systohc
          Set the Hardware Clock to the current System Time.

0

से कॉपी किया गया: CRON संदेशों को लंबे समय से Syslog में मनमाने तरीके से विलंबित किया जा रहा है :

संक्षेप में, मेरे द्वारा उपयोग किए जा रहे rsyslog के संस्करण में एक बग है, जो समय की मनमानी लंबाई के लिए प्राप्त syslog संदेश को विलंबित करेगा। बग रिपोर्ट यहाँ है। और rsyslog को अपग्रेड करने से समस्या हल हो गई। यह CRON का दोष नहीं है।


-1

इस तरह की विसंगतियों से बचने के लिए आपको एक स्ट्रेटम 1 या 2 स्रोत के लिए एक बाहरी NTP सर्वर का उपयोग करना चाहिए। हार्डवेयर घड़ियों विश्वसनीय नहीं हैं।

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