伺服器時間和資料庫時間的校驗
問題與分析
今天在公司進行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‘,//開始時間選