1. 程式人生 > >伺服器時間和資料庫時間的校驗

伺服器時間和資料庫時間的校驗

問題與分析

今天在公司進行Sanity Test(可用性測試)時發現伺服器啟動失敗,查詢log後發現在啟動時發生了異常導致了伺服器啟動失敗。

由於公司的伺服器和資料庫分別部署在不同的主機,所以會在啟動時進行時間上的校驗,如果兩臺主機的時間差超過600s就會丟擲異常、啟動失敗。這個設定的時間差被儲存在資料庫中,以方便日後修改。

SELECT TO_CHAR(CURRENT_TIMESTAMP,'YYYY-MM-DD HH24:MI:SS') AS "DBTIME";

而伺服器的本地時間以及時間的校驗則是由下邊的程式碼來實現:

final DateTime dbTime = systemMapper.getDBTime();
final
long dbTimeMs = dbTime.getMilliseconds(TimeZone.getDefault()); final DateTime webAppTime = DateTime.now(); final long webAppTimeMs = webAppTime.getMilliseconds(TimeZone.getDefault()); // Calculate difference between WebApp time and DB time final long timeDifferent = Math.abs(dbTimeMs - webAppTimeMs);

從程式碼可以看到,將伺服器和資料庫所在的主機的本地時間轉換成預設的時區後,再進行相減取絕對值,如果這個結果值超過db中設定的時間差(也就是600s)就會丟擲異常,令伺服器啟動失敗。

分析到這裡,便開始進行驗證:分別連線到兩臺主機並通過date命令來查詢各自的時間,發現雙方的時間差大概有15分鐘左右,確實超過了600s。

於是問題來了,為什麼會忽然出現這麼大的時間差?明明昨天還可以正常啟動,今天卻因為時間差變大而導致失敗了?可以確定的是,db中設定的時間差一直就是600s,並沒有人去改動它。

在工作群裡說了下伺服器啟動失敗的原因,有同事說可能是機器斷電造成的?百度了下,也有人遇到這種類似的情況,Linux的系統時間忽然變慢了幾分鐘到十幾分鍾,也有的是時間變快了。暫時沒找到具體的原因,解決辦法基本都是直接修改系統時間。

目前看來,這個問題的答案是無法得知了,對於這方面我確實不瞭解。如果哪位朋友知道的,歡迎評論告訴我一下O(∩_∩)O哈哈~

今天寫篇文章記錄下這個問題,以前我還真沒想到需要對不同主機的伺服器和資料庫進行時間校驗,百度了下,倒是發現很多安卓app關於客戶端和服務端進行時間校驗的文章,挺有意思的。

相關推薦

伺服器時間資料庫時間

問題與分析 今天在公司進行Sanity Test(可用性測試)時發現伺服器啟動失敗,查詢log後發現在啟動時發生了異常導致了伺服器啟動失敗。 由於公司的伺服器和資料庫分別部署在不同的主機,所以會在啟動時進行時間上的校驗,如果兩臺主機的時間差超過600s就會丟

jmeter 介面返回資料資料庫

記錄一下jmeter介面測試時通過beanshell斷言,介面返回資料和資料庫做校驗 老樣子單純的寫給自己看的。。。。 最近在用jmeter做介面測試,覺得單純的響應斷言有點low所以就想拿介面資料和資料庫做校驗 然後,然後發現自己不會,網上一頓亂找後眼睛都看疼了,2天

JS開始時間結束時間

<html> <head> <script> function checkTime(){ var startTime = document

開始時間結束時間 js

        /**         *判斷月份是否正確         */         function checkMonth(){             var statDateBegin = document.forms[0].statDateBegin;  

mysql設定表列的時候把時間設定成String型別,java 程式後面涉及到當前時間資料庫裡資料的差值計算,怎麼破?

mysql設定表列的時候把時間設定成String型別,java 程式後面涉及到當前時間和資料庫裡資料的差值計算,怎麼破? 如果改資料庫裡面表的列屬性varchar改成time,需要很多地方改進,而且專案已經試運行了,怕出問題? 在java程式中型別轉化很多,String型別可以轉化為date

php 根據資料庫的開始時間結束時間計算出天數 在根據天數迴圈對應的天數的次數

在專案的開發中  可能會遇到 這樣的需求 比如資料庫的欄位  start_time    end_time 開始時間  是 20180909 結束時間 是 20180913 那麼對應的 天數是4天的  那麼就要

php 根據資料庫的開始時間結束時間計算出天數 在根據天數迴圈對應的天數的次數

在專案的開發中  可能會遇到 這樣的需求 比如資料庫的欄位  start_time    end_time 開始時間  是 20180909 結束時間 是 20180913 那麼對應的 天數是4

utc時間local 時間互轉

python utc time local time python 1.utc 時間和 local 時間互轉#utc 轉本地時間def utcFlocaltime(utc_time): utc_time = utc_time + datetime.timedelta(hour

crontab執行時間系統時間不一致

google 服務器 shanghai share crontab執行時間和系統時間不一致

ORACLE取周、月、季、年的開始時間結束時間

mil nth spa direction light 4.5 oracl afr oracle  1 取周的開始時間和結束時間 取周的開始時間。以星期一為開始。 SQL>S

PYTHON學習創建當先時間昨天時間

time python datetime 1.獲取當前時間: #導入模塊time import time print time.strftime(‘%H-%M-%S‘) 時間格式: %y 兩位數的年份表示(00-99) %Y 四位數的年份表示(000-9999) %m 月份(01-12) %d

(轉)Centos7 修改硬件時間系統時間

num root cto zone 時區 lec 時鐘 硬件時間 調整 查看硬件時間 [root@localhost ~]# hwclock --show Tue 13 Jun 2017 02:11:12 AM CST -0.848845 seconds 1 2

Centos7 修改硬件時間系統時間

timezone 硬件時間 gpo show class set centos 硬件時鐘 med 查看系統時間 [root@localhost ~]# date Tue Jun 13 10:20:13 CST 2017 查看硬件時間 [root@localho

SQL Server 本地時間UTC時間的相互轉換

get gpo () localdate lda code date() post nbsp SET @UTCDate = DATEADD(hour, DATEDIFF(hour,GETDATE(),GETUTCDATE()), @LocalDate) SET @Local

【第十九篇】laydate設置起始時間,laydate設置開始時間結束時間

ace red con name col body 設置 inpu 結束時間 laydate設置開始時間後,結束時間不可小於已選擇的開始時間 laydate設置結束時間後,開始時間不可小於已選擇的結束時間 1 //設置開始時間 2

mysql 添加時間列(用於記錄創建時間修改時間

var arch csdn too 技術分享 def 兩個 key 分享 在mysql建表的時候需要添加兩個時間列,分別記錄當前記錄的創建時間和修改時間。 好。 下面是建表語句: [sql] view plain copy DRO

java UTC時間local時間相互轉換

互轉 cat color except static 相互轉換 clas AS mil 1、local時間轉UTC時間 /** * local時間轉換成UTC時間 * @param localTime * @return *

js獲取日期當天的開始時間結束時間

replace color spa style fun tar tun set start function startUnix($date) { return(new Date(Date.parse($date.replace(/-/g, "/")))).g

python獲取當前時間前一天時間

import 時間 ftime date time 格式化 %d str RF datetime ime模塊:import timetime.strftime(‘%Y%m%d‘) //time.strftime(‘%Y-%m-%d-%H:%M:%S‘) //獲取了當前時間

laydate設置起始時間,laydate設置開始時間結束時間

time function one span tar minute UNC PE color //設置開始時間 var startDate = laydate.render({ elem: ‘#start_date‘,//開始時間選