抱歉,又是一篇流水帳,在排查問題的焦頭爛額中寫博客的確是一個挑戰,望你們見諒。html
今天園友溪源More發了一篇博文博客園翻車啓示錄,而翻車以後的最新進展是——昨天下午咱們又把 .net core 引擎的博客越野車開上了高速,如今依然行駛在高速上,今天上午咱們邊開車邊給車換了個底盤,把 windows 換成了 linux(見頁腳"Powered by .NET Core 3.0 Preview 8 on Linux"),從中發現雖然車勉強能開,但修車任務艱鉅。linux
流水帳開始。web
昨天下午,部署在 windows 上的 .net core 版博客站點成功扛過了訪問高峯,當時用了7臺4核8G服務器,與 .net framework 版使用的服務器數量同樣。docker
因爲在 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 服務器加入了線上的負載均衡。windows
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 系列博文: