IIS應用程式池_緩存回收

来源:http://www.cnblogs.com/lxhbky/archive/2017/09/15/7525331.html
-Advertisement-
Play Games

本人最近由於公司業務,需要把問卷的問題和答案存入緩存中已提高問卷載入速度,減少資料庫壓力。 緩存關鍵代碼(公司代碼已做封裝,這裡只貼出關鍵代碼): HttpRuntime.Cache.Insert(key, value, new CacheDependency(dependencyFile), ... ...


本人最近由於公司業務,需要把問卷的問題和答案存入緩存中已提高問卷載入速度,減少資料庫壓力。

緩存關鍵代碼(公司代碼已做封裝,這裡只貼出關鍵代碼):

HttpRuntime.Cache.Insert(key, value, new CacheDependency(dependencyFile), Cache.NoAbsoluteExpiration, slidingExpiration, CacheItemPriority.High, onRemoveCallBack);

該緩存存儲在了:IIS應用程式池中, 又使用的是相對緩存時間模式,一直等夠時間再操作不太現實,於是就是上網查資料加上詢問同事,找到了兩種解決辦法:

1-到對應伺服器IIS上手動回收應用程式池(緩存數據被清除,評估影響後使用)
2-修改項目的配置文件後,會觸發IIS應用程式池的回收時間。(可在IIS應用程式池高級設置里設置)

/// <summary>
        /// 插入緩存對象(相對過期時間,緩存依賴)
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="slidingExpiration">相對過期時間</param>
        /// <param name="dependencyFile">文件依賴</param>
        /// <param name="onRemoveCallBack">緩存消失之後的處理方法</param>
        public static void Insert(string key, object value, TimeSpan slidingExpiration, string dependencyFile, CacheItemRemovedCallback onRemoveCallBack)
        {
            GenerateFile(dependencyFile);
            HttpRuntime.Cache.Insert(key, value, new CacheDependency(dependencyFile), Cache.NoAbsoluteExpiration, slidingExpiration, CacheItemPriority.High, onRemoveCallBack);
        }

 

 

參考資料文章:  http://www.cnblogs.com/guohu/p/5209209.html

 

IIS可以設置定時自動回收,預設回收是1740分鐘,也就是29小時。IIS自動回收相當於伺服器IIS重啟,應用程式池記憶體清空,所有數據被清除,相當於IIS重啟,在度量快速開發平臺伺服器端,為了減小資料庫負擔,記憶體中暫存了很多信息,不適合頻繁的回收,因為回收會造成伺服器端所有存在記憶體中的數據丟失,如果沒有及時保存到資料庫中,可能導致程式出現問題。而如果系統使用高峰時期,並不適合回收,回收可能導致幾十秒IIS無響應,對於正在工作的人員來說,是一種很不好的體驗,會以為是網路或者掉線等問題。因此,基於以上的分析,我們需要設置IIS在指定的時間內定時回收。
      度量快速開發平臺(以下簡稱:度量平臺)服務端搭建採用Webservice方式進行,這就需要正確的配置IIS(Internet Information Service)才能保證服務端可靠、穩定的運行,以給客戶提供更好的用戶體驗。IIS為保護伺服器資源,有一個應用程式池的回收功能,並且已經預設設置1740分鐘回收一次(29小時),為了更好的設置該屬性,我們有必要對IIS回收功能設置進行掌握,並根據應用的實際情況配合調整,以達到系統運行的最佳效果。
IIS應用程式池回收,找到相應的應用程式池並點擊高級設置,就可以看到回收的相關設置(本文以windows2008R2下的IIS7為例,Windows2012類似)。

(圖1) 

發生配置更改時禁止回收:如果為True,應用程式池在發生配置更改時將不會回收。
固定時間間隔(分鐘):超過設置的時間後,應用程式池回收,為0意味著應用程式池不會按固定間隔回收。系統預設設置的時間是1740(29小時)。
禁用重疊回收:如果為true,將發生應用程式池回收,以便在創建另一個工作進程之前退出現有工作進程。
請求限制:應用程式池在回收之前可以處理的最大請求數。如果值為0,則表示應用程式池可以處理的請求數沒有限制。
生成回收事件日誌條目:每發生一次指定的回收事件時便產生一個事件日誌條目,裡面的明細設置不一一介紹。

    根據度量平臺服務端配置情況看,IIS預設設置的1740分鐘回收進程的策略並不合理,因為每1740分鐘回收,在過程中可能就處於用戶使用系統的高峰時段,為避免可能在高峰時段引起非可控問題,我們建議在每周六深夜(例如晚上1點,2點)進行IIS回收。

    如果我們在IIS應用程式池的高級設置中,進行回收設置,那麼只有兩種方式進行,一種是固定時間間隔,一種是手動回收。固定時間間隔設置,並不太好在深夜設置,以保證每周周六深夜執行回收。我們推薦採用windows “任務計劃程式”配置一個操作系統定時任務執行腳本程式來實現IIS回收,設置方便,也可以靈活調整。 要通過腳本執行IIS的功能,需要在IIS安裝配置的時候,勾選上管理工具中的“IIS管理腳本和工具”(見下圖)。

用vbs腳本及批處理文件,結合任務計劃程式,保證在每周六深夜1點執行IIS回收。

Recyclepool.vbs 文件內容:

appPoolName = WScript.Arguments(0)

Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

Set oAppPool = oWebAdmin.Get("ApplicationPool.Name='" + appPoolName + "'")

oAppPool.Recycle

set fso=createobject("scripting.filesystemobject")

if (fso.fileexists("d:\appPool\recycleIISPool.log")) then

   '1-forreading,2-forwriting,8-appending

   set file=fso.opentextfile("d:\appPool\recycleIISPool.log",8,ture)

else

   set file=fso.createtextfile( "d:\appPool\recycleIISPool.log",8,ture)

end if

'write(x)寫入x個字元,writeline寫入換行,writeblanklines(n)寫入N個空行

file.writeline  now&" 應用程式池“"&appPoolName &"”已經回收成功。"

file.close

Recyclepool.bat文件內容:

cscript D:\appPool\recyclepool.vbs platweb

 

用vbs腳本及批處理文件,結合任務計劃程式,保證在每周六深夜1點執行IIS回收。

成功用windows計劃任務解決IIS定時回收問題。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天在公司同事問了我一個問題,用postman傳遞json字元串給介面,介面獲取到的值不正確。 我就看到下麵的json數據: { "Mark":"1" } 介面的model成員欄位定義如下: 差不多是類似的代碼,這樣子webapi介面獲取到的值就是false,如果傳遞的是"true"的話,那麼mod ...
  • 在MSDN沒找到關於使用APPCMD備份IIS的"Management Service Delegation"模塊配置命令。 到IIS的配置文件存放目錄下,幾番搜索,查到%windir%\system32\inetsrv\config\administration.config里,有我想要備份的東西 ...
  • 表達式樹可以說是Linq的核心之一,為什麼是Linq的核心之一呢?因為表達式樹使得c#不再是僅僅能編譯成IL,我們可以通過c#生成一個表達式樹,將結果作為一個中間格式,在將其轉換成目標平臺上的本機語言。比如SQL。我們常用的Linq to sql就是這樣生成SQL的。 表達式樹是.NET 3.5之後 ...
  • 最近在做一些EO方面的系統開發,由於涉及到對資料庫的操作量比較大,用ADO.NET和資料庫進行連接交互的時候,難免會對程式的性能產生影響。比如說我們現在要對九個SQL語句進行資料庫操作,並且每個語句的執行是有順序限制的,如果我們一次一個一個的與資料庫進行交互,則需要和資料庫建立九次連接,這樣對系統性 ...
  • 某天搬磚搬得熱火朝天,突然一個電話打來,業務部門反映,某功能特別卡,簡直不能忍。有多慢?大概90s。是突然很慢?還是之前就很慢?之前就有點慢,但是沒有這麼慢。好了,不扯犢子了,直接查看源碼: 調試了一下,只用了223ms,果然是日期格式的原因。 之前為什麼沒有出現這個問題,和資料庫小組溝通,資料庫小 ...
  • Kestrel是進程內伺服器,以一個包形式提供,自身不能單獨運行,必須HOST在一個.NET的WEB應用程式中。它內部封裝了對libuv的調用,但不是libuv庫簡單的封裝庫。Kestrel是個精簡的,高效的Http Server ...
  • 之前寫過一篇文件《DotNetCore跨平臺~Quartz熱部署的福音~監控文件夾的變化》,今天主要把框架優化了一下,支持外部觸發,並支持外部將參數以JobDataMap形式進行輸入,然後在咱們的Job里進行使用它,故稱參數化任務。 Quartz使用場景: 今天說的外部觸發的任務是指第一種,即在未來 ...
  • 在IIS中設置Http重定向 界面操作如下: 最終通過上面的操作生成了一個配置文件如下: 我這面就是一個空的目錄,裡面僅包含這個配置文件,就可以實現轉發啦 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...