1. 程式人生 > >高速開車換底盤記:Windows 與 Linux 部署都抗住了,但修車任務艱鉅

高速開車換底盤記:Windows 與 Linux 部署都抗住了,但修車任務艱鉅

抱歉,又是一篇流水賬,在排查問題的焦頭爛額中寫部落格的確是一個挑戰,望大家見諒。

今天園友溪源More發了一篇博文部落格園翻車啟示錄,而翻車之後的最新進展是——昨天下午我們又把 .net core 引擎的部落格越野車開上了高速,現在依然行駛在高速上,今天上午我們邊開車邊給車換了個底盤,把 windows 換成了 linux(見頁尾"Powered by .NET Core 3.0 Preview 8 on Linux"),從中發現雖然車勉強能開,但修車任務艱鉅。

流水賬開始。

昨天下午,部署在 windows 上的 .net core 版部落格站點成功扛過了訪問高峰,當時用了7臺4核8G伺服器,與 .net framework 版使用的伺服器數量一樣。

由於在 windows 上釋出太麻煩了,不僅要複製所要釋出的檔案,還要停止 IIS 站點才能複製,不然會出現下面的錯誤提示,這點比不上 .net framework 。

cp: cannot create regular file '/c/websites/www.cnblogs.com-v2/Mapster.dll': Device or resource busy

於是,昨天晚上我們就準備 linux 上的 docker-compose 部署,並進行了試釋出,將1臺部署好的 linux 伺服器加入了線上的負載均衡。

docker-compose pull
docker-compose down --remove-orphans
docker-compose --compatibility up --force-recreate -d 

之後出現的異常情況讓我們不敢自己的雙眼,資料庫伺服器 CPU 100% 的問題在 Linux 上沒有使用 DbContextPool 的情況下昔日重來了。

2019-08-15 21:00:15.320 [Error] Failed executing DbCommand ("30,360"ms) [Parameters=["..."], CommandType='Text', CommandTimeout='30']"
...
Microsoft.EntityFrameworkCore.Database.Command
2019-08-15 21:00:15.321 [Error] An exception occurred while iterating over the results of a query for context type '"EfUnitOfWork"'.
System.Data.SqlClient.SqlException (0x80131904): Timeout expired.  
The timeout period elapsed prior to completion of the operation or the server is not responding.
 ---> System.ComponentModel.Win32Exception (258): Unknown error 258
   at System.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__126_0(Task`1 result)

在殘酷的事實面前,我們不得不承認我們錯怪了 DbContextPool ,這個詭異的問題是在某種未知的情況下偶然觸發的,昨天我們去掉 DbContextPool 後沒有出現問題,只是因為沒有觸發。

今天上午,我們將 docker-compose 部署 .NET Core 站點的 linux 伺服器逐步上線了,在 11:00 左右全部換成了 linux 伺服器,一共用了 6 臺伺服器,扛過了上午的訪問高峰。.net framework 版部落格用的也是 6 臺伺服器,所以我們就預設部署了 6 臺,linux 上的 .net core 版部落格究竟多少臺伺服器可以撐住,我們還沒有驗證過。

其中 1 臺 linux 伺服器的 CPU 佔用情況如下:

今天早上還發現了 Windows 伺服器的一個異常情況,一夜之後,8G的記憶體幾乎被消耗殆盡,之前用 .net framework 版從來沒有出現過的問題,不知是昨天夜裡 .net core GC 偷懶了,還是我們寫的程式碼存在記憶體洩露問題?

流水賬就寫到這。

接下來我們最艱鉅的修車任務是排查資料庫伺服器 CPU 100% 的詭異問題。

Powered by .NET Core 系列博文:

  • 【故障公告】釋出 .NET Core 版部落格站點引起大量 500 錯誤
  • 【網站公告】.NET Core 版部落格站點第二次釋出嘗試
  • 暴風雨中的 online : .NET Core 版部落格站點遭遇的高併發問題進展
  • Powered by .NET Core 進展:驗證高併發效能問題嫌疑犯 docker swarm
  • 同“窗”的較量:部署在 Windows 上的 .NET Core 版部落格站點發布上線
  • 做夢也沒有想到:Windows 上的 .NET Core 版部落格系統表現更糟糕
  • 峰迴路轉:去掉 DbContextPool 後 Windows 上的 .NET Core 版部落格表現出色
  • Powered by .NET Core 進展0815:第5次釋出嘗試(Windows部署)