O tempo do sistema Linux salta temporariamente

11

Vi uma hora estranha do sistema alterando o comportamento em alguns servidores (hardware): em /var/logs/syslog, a data e hora anterior a cada mensagem de log às vezes muda para uma aleatória e volta ao normal na próxima mensagem, como a seguir:

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 ...  

Como no exemplo, a mudança repentina de data e hora pode chegar a centenas de anos.

Posso confirmar que as mensagens de registro com carimbos de data / hora estranhos não provêm de nenhum processo específico - isso pode acontecer aleatoriamente para todos.

E a duração entre duas alterações anormais de tempo varia entre alguns minutos e algumas horas (no entanto, eu suspeito que as alterações anormais de tempo possam ocorrer com mais frequência, mas muitas delas não são reveladas no syslog, pois ele não está gravando logs a cada segundo).

Além disso, como acontece em mais de um servidor, presumo que não seja um problema de hardware.

Mais informações sobre os servidores: são uma instalação openstack com um controlador e alguns nós de computação. Cada servidor tem o serviço NTP em execução. O controlador está configurado para levar tempo a partir de seu próprio relógio de hardware, e os servidores dos nós de computação sincronizam o tempo com o controlador. Observe que cada servidor tem alterações de horário anormais no seu próprio ritmo - parece que o "horário errado" não é sincronizado do controlador através do ntp.

Eu suspeitava que os sistemas convidados (máquinas virtuais) nos nós de computação pudessem afetar o tempo do sistema host. Mas isso não pode explicar por que o controlador tem o mesmo problema enquanto não está executando nenhuma máquina virtual.

Preciso de um método para detectar: ​​quem mudou a hora do sistema e como isso acontece?

Zhaohui Yang
fonte
Os carimbos de data e hora mostrados são carimbos de data e hora reais ? Você tem mais exemplos para mostrar?
Kusalananda
Os servidores em questão são servidores blade? Nesse caso, a unidade de gerenciamento de chassi blade pode estar tentando sincronizar os relógios de blades de servidor individuais. Seria necessário conhecer o modelo real do servidor para procurar erros de hardware de relógio conhecidos.
TelcoM 7/08
Você também pode monitorar o tempo de HW - hwclock? Se ela muda, nesse momento também ...
Jaroslav Kucera
3
Observe que o syslogd simplesmente grava o conteúdo da mensagem que foi enviada de qualquer processo para o arquivo de log apropriado; o registro de data e hora é realmente enviado na mensagem, não é gerado pelo syslogd. Então, talvez algo esteja corrompendo as mensagens, ou se for um tipo de processo, talvez esse processo esteja enviando mensagens syslog com erros. Para sua informação, o formato é descrito pela RFC3164; a parte da data / hora é enviada em ASCII simples.
Wurtel
Coloque todas as informações da duplicata com várias postagens em superuser.com/questions/1298404 na pergunta .
JdeBP

Respostas:

1

Os aspectos relevantes são as versões do kernel e essas linhas desde o início do processo de inicialização:

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

YMMV e você pode não estar usando TSC ou PIT

AFAIK, este é um erro causado pelo fato de o relógio de pelo menos uma de suas CPUs estar fora de sincronia, provavelmente no seu caso, correndo muito rápido.

Deve ser fácil confirmar executando o seguinte:

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

que será executado dateem cada CPU (supondo que você tenha até 8 núcleos / threads). Se meu palpite estiver correto, um de seus CPUs terá o tempo errado de forma consistente.

Se for esse o caso, você deve primeiro tentar atualizar o kernel e, se isso não funcionar, mexa no parâmetro de inicialização clocksource (supondo que seja 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

Veja também a saída disso:

cat /sys/devices/system/clocksource/clocksource*/available_clocksource
V13
fonte
0

Parece que o relógio do hardware no servidor do controlador não é um recurso estável de informações sobre a hora. Você deve configurar seu controlador para sincronizar seu tipo com um relógio atômico mais confiável.

Este é o comando que você pode usar para atualizar seu relógio de hardware: hwclock -s

Veja também:

   -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.
Dmitriy Kupch
fonte
-1

Você deve usar um servidor NTP externo sincronizado com uma fonte do estrato 1 ou 2 para evitar essas anomalias. Relógios de hardware não são confiáveis.

Oxigênio
fonte