Windows
伺服器凍結的原因
我們建了一台windows 2012R2伺服器(它有足夠的可用記憶體/磁碟空間,CPU性能很高),但它每12小時就會凍結大約半小時。
症狀:
- 無法訪問伺服器中託管的網站
- 無法遠端進入伺服器
調查結果:
- 伺服器的 EventView 中有許多 EventID= 508(對於svchost.eve)、833(對於sqlserver)。
EventID= 508之一:svchost (2128) 成功寫入文件“C:\Windows\system32\LogFiles\Sum\Svc.log”的偏移量 4775936 (0x000000000048e000) 4096 (0x00001000) 字節,但需要作業系統提供異常長的時間(36 秒)。此問題可能是由於硬體故障。請聯繫您的硬體供應商以獲得診斷問題的進一步幫助。
- 下面是磁碟性能圖表:
你會看到**% IDLE Time**小於 40%,Queue Length有時會達到 100。即使數據收集器似乎在上午 8:37 到上午 8:50 之間停止工作。
似乎瓶頸是磁碟 I/O,它導致伺服器被凍結。但我不知道如何進一步調查。
我的問題:
- **% IDEL Time < 40%**很糟糕嗎?隊列長度達到100怎麼辦?
- 什麼可能導致數據收集器停止工作?
- 如果根本原因是硬體故障,那麼伺服器在一天的大部分時間裡如何正常工作?
啊,總是一樣…
(它有足夠的可用記憶體/磁碟空間,CPU 的高性能)
是的,但你知道你不說什麼嗎?磁碟性能。
字節成功,但花費了異常長的時間(36 秒)
對 dis 的操作並不像它應該花費的那樣花費毫秒,而是 36 秒。你基本上有一輛 40 噸的卡車,並抱怨它沒有一級方程式賽車快。讓我猜猜 - 超級慢且大的 SATA 硬碟,每個使用數據庫的人要麼使用數十張磁碟,要麼將 LOOONG 轉移到 SSD,其 IO 容量是高端磁碟的 100 倍。
這有4個原因,可能:
- 有缺陷的硬體。發生了,我們在這裡無能為力。檢查第二台機器。
- 缺陷驅動程序。請參閱第一個主題。
- 完全不適合的 AWFUL 硬體選擇,因為它完全不提供應用程序所需的 IO 頻寬。
最後:
- 不稱職的數據庫開發人員從不費心學習正確的數據庫程式,因此不知道索引是什麼,導致每個查詢使用 WAAAAAAYY 更多的 IO 頻寬,而不是應該使 IO 子系統過載,否則可能足夠好。這種方式見得太多了。https://use-the-index-luke.com/ - 是的,“無能”是一種友好的方式,你會怎麼稱呼計程車司機,因為他從沒學過駕駛,所以他一啟動就炸了車;)
這樣就可以確定了。事情在同一時間發生並且只持續半小時這一事實表明它不是前兩項之一——這些事情發生得更加隨機,即並不總是同時發生。
開始評估硬體容量並檢查哪些查詢速度較慢。然後可能會錘擊程序員以實際完成他們的工作並添加適當的索引。