一部の(ハードウェア)サーバーでは、奇妙なシステム時間変更の動作が表示されます。で、/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つの異常な時間変化の間の持続時間は、数分から数時間まで変化する可能性があります(ただし、異常な時間変化がより頻繁に発生する可能性があると思いますが、1秒ごとに記録されないため、システムログに表示されない場合もあります。多い)ログに)。
そして、複数のサーバーで発生するため、ハードウェアの問題ではないようです。
サーバーに関する追加情報:コントローラと一部のコンピューティングノードを含むOpenStackのインストール。各サーバーはntpサービスを実行します。コントローラは独自のハードウェアクロックから時間を取得するように構成され、コンピューティングノードサーバはコントローラの時間を同期させる。各サーバーには固有の時間変化があります。 「間違った時間」がコントローラのntpを介して同期されていないようです。
コンピューティングノードのゲストシステム(仮想マシン)がホストシステムの時間に影響を与えると疑われます。ただし、仮想マシンを実行しなくてもコントローラに同じ問題が発生する理由は説明されていません。
検出する方法が必要です。誰がシステム時間を変更し、どのように変更されましたか?
答え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 これは、少なくとも1つのCPUクロックが同期していないために発生するバグで、あなたの場合はあまりにも速く実行することができます。
次のコマンドを実行すると簡単に確認できます。
for cpu in {0..8} ; do taskset -c $cpu date ; done
これはdate
各CPUに対して実行されます(最大8つのコア/スレッドがあると仮定)。私の推測が正しい場合、CPUの1つは常に間違った時間を持っています。
この場合は、まずカーネルのアップグレードを試みる必要がありますが、それでも機能しない場合は、Clocksource起動パラメータを変更してください(と仮定してください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
答え2
コピーした場所:CRONメッセージは、システムログでランダムに長時間遅延します。:
簡単に言えば、私が使用しているrsyslogのバージョンには、ランダムな時間に入ってくるsyslogメッセージを遅らせるバグがあります。ここにバグレポートがあります。 rsyslogをアップグレードすると問題が解決しました。これはCRONのせいではありません。
答え3
コントローラサーバーのハードウェアクロックは、時間に関する安定した情報源ではないようです。そのタイプをより安定したアトミッククロックと同期するようにコントローラを設定する必要があります。
ハードウェアクロックを更新するために使用できるコマンドは次のとおりです。
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.
答え4
このような異常を回避するには、Tier 1またはTier 2ソースと同期する外部NTPサーバーを使用する必要があります。ハードウェア時計は信頼できません。