天天看點

抓蟲系列(二) 不要輕視web程式中常用的三個"池" 之應用程式池

前篇回顧:上一篇蟲子給大家介紹了線程安全中容易出錯的地方 内容不深 引發大家的思考與關注 看似簡單的小程式可是為引發大麻煩的額 ~ ~

下面蟲子給大家介紹下web應用範圍的應用程式池、線程池以及資料庫連接配接池中容易出現的問題

首先來看應用程式池

 你的session丢失了嗎?! 有 當然有 不過我們一般都是設定逾時時間或者新版本更新修改了配置檔案導緻丢失的。好吧,可以預見的異常蟲子就不和大家多扯了。

     應用程式池是将一個或多個應用程式連結到一個或多個工作程序集合的配置。因為應用程式池中的應用程式與其他應用程式被工作程序邊界分隔,是以某個應用程式池中的應用程式不會受到其他應用程式池中應用程式所産生的問題的影響。(概念又見概念、枯燥的東西( ⊙ o ⊙ ))

下面詳細的概念蟲子就不具體說了 幾張圖送上 有什麼功能自己琢磨下

下面是重點了 看到了沒 那個回收工作程序

IIS 将應用程式分散到隔離的池中,并自動檢測記憶體洩漏、有缺陷的程序和過度利用的資源。如果發生問題,IIS 通過關閉然後重新部署有問題的資源并将有問題的程序連接配接到解析工具上進行管理。亮點來了

工作程序回收如何工作

1.預設情況下,WWW 服務建立“重疊回收”,即繼續運作要終止的工作程序,直到啟動新的工作程序後為止。 

2.WWW 服務可以終止一個工作程序,然後啟動一個新的工作程序(如果工作負荷允許執行此操作的話)。

何時使用工作程序回收

1.無法修複 Web 伺服器上您所主要的有故障的應用程式。 

2.遇到不能确定的或間斷性的故障。 

3.應用程式由于性能監視的原因而洩漏記憶體。 

4.先前已實施了臨時性的重置解決方案,例如,計劃執行 IISReset 指令行實用工具。

說得籠統點,我們經常碰到的就是:工作程序虛拟記憶體或者W3wp.exe 程序使用的記憶體達到門檻值(session總體積過大)、未關注應用程式池時間配置

解決這類問題一方面可以禁用工作程序回收

在上圖“回收”頁籤上,清除“回收工作程序(分鐘)”複選框。

另外也可以改變session的存儲方式

<a href="http://blog.51cto.com/dubing/712449#">?</a>

<code>&lt;sessionState mode=</code><code>"InProc"</code> <code>stateConnectionString=</code><code>"tcpip=127.0.0.1:42424"</code> <code>sqlConnectionString=</code><code>"data source=127.0.0.1;user id=sa;password="</code> <code>cookieless=</code><code>"false"</code> <code>timeout=</code><code>"20"</code><code>/&gt;</code>

将inproc(程序模式)改為StateServer,也就是将會話資料存儲到單獨的記憶體緩沖區中(這個最常用)或者改為SQL Server進行資料庫會話管理。

本文轉自 熬夜的蟲子  51CTO部落格,原文連結:http://blog.51cto.com/dubing/712449