Widziałem dziwne zachowanie zmieniające się w czasie systemowym na niektórych (sprzętowych) serwerach: w /var/logs/syslog
czasie data poprzedzająca każdy komunikat dziennika czasami zmienia się na losową i wraca do normy w następnym komunikacie, jak poniżej:
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 ...
Podobnie jak w przykładzie, nagła zmiana daty może nastąpić nawet za setki lat.
Mogę potwierdzić, że komunikaty dziennika zawierające dziwne znaczniki czasu nie pochodzą z żadnego konkretnego procesu - mogą się zdarzyć losowo dla każdego.
Czas trwania między 2 nieprawidłowymi zmianami czasu waha się od kilku minut do kilku godzin (podejrzewam jednak, że nieprawidłowe zmiany czasu mogą zdarzać się częściej, ale wiele z nich nie jest ujawnianych w syslog, ponieważ nie zapisuje dzienników co sekundę).
Ponadto, ponieważ dzieje się to na więcej niż jednym serwerze, zakładam, że nie jest to problem sprzętowy.
Więcej informacji o serwerach: są one instalacją typu openstack z jednym kontrolerem i kilkoma węzłami obliczeniowymi. Każdy serwer ma uruchomioną usługę NTTP. Kontroler jest skonfigurowany tak, aby pobierał czas z własnego zegara sprzętowego, a serwery węzłów obliczeniowych synchronizowały czas z kontrolera. Zauważ, że każdy serwer ma nietypowe zmiany czasu we własnym tempie - wygląda na to, że „zły czas” nie jest zsynchronizowany z kontrolerem przez ntp.
Podejrzewałem, że systemy-goście (maszyny wirtualne) w węzłach obliczeniowych mogą wpływać na czas systemu hosta. Ale to nie może wyjaśnić, dlaczego kontroler ma ten sam problem, gdy nie działa żadna maszyna wirtualna.
Potrzebuję metody wykrywania: kto zmienił czas systemowy i jak to się dzieje?
źródło
hwclock
? Jeśli to też się zmieni w tym czasie ...Odpowiedzi:
Istotnymi aspektami są wersje jądra i następujące linie od samego początku procesu rozruchu:
YMMV i możesz nie używać TSC ani PIT
AFAIK jest to błąd, który jest spowodowany brakiem synchronizacji zegara co najmniej jednego z procesorów, w twoim przypadku prawdopodobnie działa zbyt szybko.
Potwierdzenie tego powinno być łatwe:
który będzie działał
date
na każdym procesorze (zakładając, że masz do 8 rdzeni / wątków). Jeśli zgaduję, że jeden z twoich procesorów konsekwentnie będzie miał niewłaściwy czas.W takim przypadku powinieneś najpierw zaktualizować jądro, a jeśli to nie zadziała, baw się z parametrem rozruchowym clocksource (zakładając, że
x86-64
):Zobacz także wynik tego:
źródło
Wygląda na to, że zegar sprzętowy na serwerze kontrolera nie jest stabilnym zasobem informacji o czasie. Należy skonfigurować kontroler, aby synchronizował jego typ z bardziej niezawodnym zegarem atomowym.
Oto polecenie, którego możesz użyć do zaktualizowania zegara sprzętowego:
hwclock -s
Zobacz też:
źródło
skopiowane z: Wiadomości CRON są opóźnione przez dowolny czas w syslog :
źródło
Powinieneś użyć zewnętrznego serwera NTP zsynchronizowanego ze źródłem warstwy 1 lub 2, aby uniknąć takich anomalii. Zegary sprzętowe nie są niezawodne.
źródło