Thời gian hệ thống Linux nhảy theo thời gian


11

Tôi thấy một hành vi thay đổi thời gian hệ thống kỳ lạ trong một số máy chủ (phần cứng): trong /var/logs/syslog, thời gian ngày trước mỗi thông điệp tường trình đôi khi thay đổi thành một ngẫu nhiên và trở lại bình thường trong thông báo tiếp theo, như sau:

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

Như trong ví dụ, sự thay đổi đột ngột của thời gian ngày có thể cách xa hàng trăm năm.

Tôi có thể xác nhận rằng các thông điệp tường trình có dấu thời gian lạ không đến từ bất kỳ quy trình cụ thể nào - nó chỉ có thể xảy ra ngẫu nhiên cho mỗi người.

Và thời lượng giữa 2 thay đổi thời gian bất thường thay đổi từ vài phút đến vài giờ (tuy nhiên, tôi nghi ngờ sự thay đổi thời gian bất thường có thể xảy ra thường xuyên hơn nhưng nhiều trong số chúng không được tiết lộ trong syslog, vì nó không ghi nhật ký mỗi giây).

Ngoài ra, vì nó xảy ra trên nhiều máy chủ, tôi cho rằng đó không phải là vấn đề phần cứng.

Thông tin thêm về các sever: chúng là một bản cài đặt openstack với một bộ điều khiển và một vài nút tính toán. Mỗi máy chủ có dịch vụ ntp đang chạy. Bộ điều khiển được cấu hình để lấy thời gian từ đồng hồ phần cứng của chính nó và máy chủ nút tính toán thời gian đồng bộ hóa từ bộ điều khiển. Lưu ý rằng mỗi máy chủ có thay đổi thời gian bất thường theo tốc độ của riêng nó - có vẻ như "thời gian sai" không được đồng bộ hóa từ bộ điều khiển thông qua ntp.

Tôi đã nghi ngờ các hệ thống khách (máy ảo) trên các nút tính toán có thể ảnh hưởng đến thời gian hệ thống máy chủ của chúng. Nhưng điều này không thể giải thích tại sao bộ điều khiển có cùng một vấn đề trong khi không chạy bất kỳ máy ảo nào.

Tôi cần một phương pháp để phát hiện: ai đã thay đổi thời gian hệ thống và nó xảy ra như thế nào?


Là dấu thời gian hiển thị dấu thời gian thực tế ? Bạn có nhiều ví dụ để hiển thị?
Kusalananda

Là các máy chủ trong máy chủ lưỡi câu hỏi? Nếu vậy, đơn vị quản lý khung gầm có thể đang cố gắng đồng bộ hóa đồng hồ của các lưỡi máy chủ riêng lẻ. Biết mô hình máy chủ thực tế sẽ là cần thiết để tìm kiếm các lỗi phần cứng đồng hồ đã biết.
telcoM

Bạn cũng có thể theo dõi thời gian CTNH - hwclock? Nếu nó cũng thay đổi vào thời điểm đó ...
Jaroslav Kucera

3
Lưu ý rằng syslogd chỉ đơn giản là viết nội dung của thông điệp mà nó được gửi từ bất kỳ quy trình nào vào tệp nhật ký thích hợp; dấu thời gian thực sự được gửi trong tin nhắn, nó không được tạo bởi syslogd. Vì vậy, có lẽ một cái gì đó đang làm hỏng các tin nhắn, hoặc nếu đó là một loại quy trình, có lẽ quá trình đó đang gửi các tin nhắn syslog lỗi. FYI định dạng được mô tả bởi RFC3164; phần ngày / giờ được gửi bằng ASCII đơn giản.
wurtel

Vui lòng đặt tất cả thông tin từ bản sao được đăng nhiều lần tại superuser.com/questions/1298404 trong câu hỏi .
JdeBP

Câu trả lời:


1

Các khía cạnh liên quan là các phiên bản kernel và các dòng này từ sớm trong quá trình khởi động:

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

YMMV và bạn có thể không sử dụng TSC hoặc PIT

AFAIK đây là một lỗi xảy ra do đồng hồ của ít nhất một trong số các CPU của bạn không đồng bộ, trong trường hợp của bạn có thể chạy quá nhanh.

Thật dễ dàng để xác nhận bằng cách chạy này:

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

sẽ chạy datevới mỗi cpu (giả sử bạn có tối đa 8 lõi / luồng). Nếu tôi đoán là chính xác thì một trong những CPU của bạn sẽ luôn có thời gian sai.

Nếu đó là trường hợp đầu tiên, trước tiên bạn nên thử nâng cấp kernel và nếu điều đó không hoạt động, hãy sử dụng tham số khởi động clockource (giả sử nó 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

Xem thêm đầu ra của điều này:

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

0

Có vẻ như đồng hồ phần cứng trên máy chủ điều khiển của bạn không phải là nguồn thông tin ổn định về thời gian. Bạn nên cấu hình bộ điều khiển của mình để đồng bộ hóa loại của nó với đồng hồ nguyên tử đáng tin cậy hơn.

Đây là lệnh bạn có thể sử dụng để cập nhật đồng hồ phần cứng của mình: hwclock -s

Xem thê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.


-1

Bạn nên sử dụng máy chủ NTP bên ngoài được đồng bộ hóa với nguồn 1 hoặc 2 tầng để tránh những bất thường như vậy. Đồng hồ phần cứng không đáng tin cậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.