2009-06-21 59 views
0

Web應用程序在數據庫中存儲圖像。Asp.net緩存和w3p內存使用

在我們的第一個設置中,我們從asp.net緩存中調整大小的數據庫中存儲(和提供)圖像。這一切都很好,但隨着網絡開始越來越多的點擊,我們開始遇到奇怪的問題,並且奇怪,我的意思很奇怪 - 從沒有任何細節的w3p崩潰到隨機出現的OutOfMemoryExceptions,每天都有幾次發生。

我懷疑asp.net緩存可能會被我們誤用,所以我重寫了圖像緩存以轉到文件系統。我們的圖像處理程序現在檢查緩存目錄中的已調整大小的圖像,如果不存在此類圖像,則從數據庫中提取該圖像並將其保存在緩存目錄中,然後從中提供。

困擾着我的是這個網站的w3p的內存使用情況。之前,當我們使用asp.net緩存對象時,w3p的典型內存使用量大約爲600mb。現在,當處理程序從文件系統提供圖像時,典型的內存使用量大約爲750MB。不知何故,我預計它會下降(至少有點),但絕對不會。這有什麼解釋嗎?

其次,有沒有辦法檢查w3p進程以查看有多少內存用於什麼?有一點想到的是性能計數器,但沒有時間檢查出來。

+0

你爲什麼不使用Profiler來看看什麼是內存佔用? – RichardOD 2009-06-21 10:08:51

回答

1

這只是我的猜測,但如果文件I/O被緩衝,是不是會佔用大量內存?可能比ASP緩存更爲如此,因爲每個文件都需要緩衝區而不是從緩存中獲取共享資源。

至於內存分析,有許多profiler程序可以用來分析發生了什麼。

+0

所以你說文件系統提供的文件使用更多的內存,而不是緩存在asp.net的緩存中?我不知道這是不是我,但這聽起來錯了/奇怪。任何人都可以確認嗎? – Vnuk 2009-06-21 10:05:48

+0

我確實說過這是猜想 - 我只是在大聲思考。 – nickd 2009-06-21 15:36:29

+0

我已經勾選了您的答案,提醒我提供了剖析器工具。使用.net內存分析器似乎現在有更多的頁面(字符串)在緩存中,然後當它充滿了圖像。謝謝。 – Vnuk 2009-06-21 16:25:52

0

你確定你對這些項目已經禁用了的OutputCache?好像你仍然執行動態代碼,以確定是否有必要是否創建調整後的圖像,所以有可能仍然是一個積極的OutputCache

0

那多張圖片放入高速緩存導致其成長和壯大。當進程佔用60%的可用內存時,asp.net的默認行爲將重新啓動。當一個進程將被回收和第二將被創建,但先不完成時間長

OutOfMemoryException異常可倒掉。然後你有2個進程需要大量的內存。如果應用程序繁忙併且有很多請求,那麼可能會有超過2個進程。這導致OutOfMemoryException。

我重寫了圖像緩存以轉到 文件系統。我們的圖像處理程序現在 檢查高速緩存目錄中的已調整大小的圖像,如果不存在此類圖像,則從 中檢索已調整大小的圖像 ,並將其保存在高速緩存 dir中,並從中提供。

這是我們的最佳解決方案。 FileSystem緩存在操作系統級別。