리눅스 시스템 시간이 일시적으로 점프


11

일부 (하드웨어) 서버에서 이상한 시스템 시간 동작이 바뀌는 것을 보았습니다. in에서 /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 ...  

예에서와 같이 날짜 시간의 급격한 변경은 수백 년이 걸릴 수 있습니다.

이상한 타임 스탬프가있는 로그 메시지가 특정 프로세스에서 나오지 않았 음을 확인할 수 있습니다. 모든 메시지에 대해 무작위로 발생할 수 있습니다.

그리고 두 가지 비정상 시간 변경 사이의 지속 시간은 몇 분에서 몇 시간 사이에 다양합니다 (그러나 비정상적인 시간 변경이 더 자주 발생할 수 있다고 생각하지만 매 초마다 로그를 작성하지 않기 때문에 많은 것이 syslog에 표시되지 않습니다).

또한 둘 이상의 서버에서 발생하므로 하드웨어 문제가 아니라고 가정합니다.

서버에 대한 추가 정보 : 하나의 컨트롤러와 몇 개의 컴퓨팅 노드가있는 오픈 스택 설치입니다. 각 서버에는 ntp 서비스가 실행 중입니다. 컨트롤러는 자체 하드웨어 시계에서 시간이 걸리도록 구성되며 컴퓨팅 노드 서버는 컨트롤러에서 시간을 동기화합니다. 각 서버는 자체 속도에 따라 비정상적인 시간 변경이 있습니다. "잘못된 시간"이 ntp를 통해 컨트롤러에서 동기화되지 않은 것처럼 보입니다.

컴퓨팅 노드의 게스트 시스템 (가상 시스템)이 호스트 시스템 시간에 영향을 줄 수 있다고 의심했습니다. 그러나 이것은 가상 머신을 실행하지 않는 동안 컨트롤러에 동일한 문제가있는 이유를 설명 할 수 없습니다.

누가 시스템 시간을 변경했으며 어떻게 발생합니까?를 감지하는 방법이 필요합니다.


표시된 타임 스탬프가 실제 타임 스탬프입니까? 보여줄 예가 더 있습니까?
Kusalananda

문제의 서버가 블레이드 서버입니까? 그렇다면 블레이드 섀시 관리 장치가 개별 서버 블레이드의 시계 동기화를 시도하고있을 수 있습니다. 알려진 시계 하드웨어 버그를 찾으려면 실제 서버 모델을 알아야합니다.
telcoM

HW 시간도 모니터링 할 수 있습니까 hwclock?
그때도

3
syslogd는 단순히 어떤 프로세스에서든 전송 된 메시지의 내용을 해당 로그 파일에 기록합니다. 타임 스탬프는 실제로 메시지 내에서 전송되며 syslogd에 의해 생성되지 않습니다. 따라서 메시지가 손상되었거나 프로세스의 한 유형 인 경우 해당 프로세스가 버그가있는 syslog 메시지를 보내는 중일 수 있습니다. 참고로 형식은 RFC3164에 의해 설명됩니다. 날짜 / 시간 부분은 일반 ASCII로 전송됩니다.
wurtel

질문superuser.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각 CPU에 대해 실행됩니다 (최대 8 개의 코어 / 스레드가 있다고 가정). 내 추측이 맞다면 CPU 중 하나가 지속적으로 잘못된 시간을 갖게됩니다.

이 경우 먼저 커널 업그레이드를 시도하고 그래도 작동하지 않으면 clocksource boot 매개 변수를 사용하여 바이올린을 설정하십시오 (가정 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.


-1

이러한 이상을 피하려면 계층 1 또는 2 소스에 동기화 된 외부 NTP 서버를 사용해야합니다. 하드웨어 시계는 신뢰할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.