成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何查找.NET程序內(nèi)存不斷上漲的原因

開發(fā) 后端
方案1:把要下載的數(shù)據(jù)一并加載到內(nèi)存,用戶在下載的時候通過position來獲取byte[]不新建直接返回,是能解決問題,但這就大大降低了服務(wù)端的可用性啊,只能當做小文件服務(wù)端,太不合理。

前段時間公司新寫的自動升級服務(wù)端(Remoting)出現(xiàn)了內(nèi)存不斷飆升的情況,從最初的七八十兆一晚上竟然飆到了1G多,直接導(dǎo)致客戶端連接服務(wù)端失敗,這不科學(xué),后來優(yōu)化了各種可能造成占用內(nèi)存的方法(數(shù)據(jù)庫連接,I/O操作,引用類型釋放),但效果不佳,這下可難為我們了,不知道問題的所在也就不知道該如何去修改。

我們知道.NET是帶有垃圾回收機制的,出現(xiàn)這種情況一般是由某些數(shù)據(jù)長期存活在內(nèi)存中又不能被當成垃圾數(shù)據(jù)回收的原因造成的。

后來就在各搜索引擎上進行了各種搜索,有說使用windebug分析dump,但需要大量時間琢磨,有人說是不是硬件問題,還有人說中毒了,***找到了一款微軟推出的CLRProfiler工具,貌似很強大,遂MSDN了一把,MSDN是這樣說的:

Who allocates what on the managed heap.
Which objects survive on the managed heap.
Who is holding on to objects.
What the garbage collector does over the lifetime of your application.

得到這些信息以后就決定使用一下,讓服務(wù)端運行了一會兒,停止以后得到分析結(jié)果,最終在Allocation Graph視圖下了解到原來是下載文件DownloadFile方法下的byte[]數(shù)組引起的,短短不到一分鐘的時間竟然占用了兩百多兆的內(nèi)存,好了,這下可找到“原兇”了,有得折騰了

方案1:把要下載的數(shù)據(jù)一并加載到內(nèi)存,用戶在下載的時候通過position來獲取byte[]不新建直接返回,是能解決問題,但這就大大降低了服務(wù)端的可用性啊,只能當做小文件服務(wù)端,太不合理。

方案2:由于下載文件的時候返回的是一個可序列化的類,所以想是不是這里出現(xiàn)了問題,可以直接返回byte[],以最基本的數(shù)據(jù)頭->數(shù)據(jù)長度->數(shù)據(jù)->數(shù)據(jù)尾來實現(xiàn),但這樣一來要改的東西太多了,服務(wù)端客戶端,協(xié)議重構(gòu),眼看著就要落幕的項目卻要重頭再來心有不甘那,再加上還有一堆任務(wù)在后面趕著,這不是坑自己嗎,也放棄了。

然后又回到各種網(wǎng)絡(luò)資料搜索上,經(jīng)過一番查找后了解到,byte[]最終也是會被回收的,只要是托管的數(shù)據(jù)都是能被回收的,只是周期可能會長一些,***又回到了Remoting本身上,抱著試一試的心態(tài)把WellKnowObjectMode由SingleTon改為了SingleCall,跑了一晚上***穩(wěn)定在了200M上下,總算松了口氣。

使用SingleTon本來是想節(jié)省內(nèi)存消耗的,可沒想到得不償失如此的大費周折,遂總結(jié)出SingleTon并不適合并發(fā)量大的服務(wù)端程序,SingleTon是單線程模式,在調(diào)用每個方法的時候都會被加鎖,猜測造成數(shù)據(jù)一直不能被釋放的原因是由這些鎖造成的,由于連接的數(shù)量太多導(dǎo)致連接一直處于排隊狀態(tài),造成了后面連接的客戶端響應(yīng)過慢,連接超時,在這里也給大家一個教訓(xùn)還是用SingleCall實在。

上面說了這么多只是跟大家分享一下解決問題的經(jīng)驗,還有敘述了一下問題的所在,如果各位有不同的見解請一定要指出來,畢竟.NET內(nèi)存分配、垃圾回收本就比較復(fù)雜。

然事與愿違卻柳暗花明

這篇文章的重點是講如何使用CLRProfiler來查找.NET程序的內(nèi)存分配情況的,下面就開始吧。

下載CLR Profiler:http://search.microsoft.com/en-us/DownloadResults.aspx?q=clr%20profiler

可根據(jù)自己.NET的版本下載相應(yīng)的CLRProfiler,下面以.NET4.0版本為例。CLRProfiler可以分析應(yīng)用程序,服務(wù)和ASP.NET編寫的程序,以下以應(yīng)用程序為例為大家演示如何簡單使用CLRProfiler。

下面是一個拆箱裝箱的例子CLRProfilerTestDemo,通過這個例子來觀察進程托管堆的分配和研究垃圾回收機制的行為表現(xiàn),代碼如下

  1. using System;  
  2. using System.Collections.Generic;  
  3. namespace CLRProfilerTestDemo  
  4. {  
  5.     class Program  
  6.     {  
  7.         static void Main(string[] args)  
  8.         {  
  9.             for (int i = 0; i < 100 * 1000; i++)  
  10.             {  
  11.                 Boxing box = new Boxing();  
  12.             }  
  13.  
  14.             Environment.Exit(Environment.ExitCode);  
  15.         }  
  16.     }  
  17.  
  18.     class Boxing  
  19.     {  
  20.         private List<object> box = new List<object>();  
  21.         private List<int> unbox = new List<int>();  
  22.  
  23.         public Boxing()  
  24.         {  
  25.             for (int i = 0; i < 1000; i++)  
  26.             {  
  27.                 box.Add(i);  
  28.                 unbox.Add((int)box[i]);  
  29.             }  
  30.         }  
  31.     }  

運行CLRProfiler,選中Allocation和Calls選項如下圖:

編譯程序,點擊Start Application選擇CLRProfilerTestDemo.exe,將會運行此程序,運行一段時間后,點擊Kill Application,CLRProfiler將會顯示分析結(jié)果。

打開Allocated bytes直方圖界面,如下圖,在右側(cè)的分配類型區(qū)可以找到可疑的類Boxing

下面是Allocation Graph內(nèi)存分配視圖,在這個視圖當中我們可以看出堆棧是如何分別對象的。

通過CLRProfiler工具進行這幾步簡單的操作即可找出造成應(yīng)用程序內(nèi)存飆升的源頭,并想辦法修復(fù),很簡單吧,如果感興趣的朋友可以去網(wǎng)上更加詳細的了解。

MSDN官方教程:How To: Use CLR Profiler

原文鏈接:http://www.cnblogs.com/zhaoblogs/archive/2012/11/02/2752015.html

【編輯推薦】

  1. ASP.NET Web開發(fā)框架之一 功能導(dǎo)航
  2. ASP.NET Web開發(fā)框架之二 數(shù)據(jù)輸入窗體
  3. ASP.NET Web開發(fā)框架之三 報表開發(fā)
  4. ASP.NET Web開發(fā)框架之四 查詢
  5. ASP.NET Web開發(fā)框架之五 控件擴展
責(zé)任編輯:張偉 來源: 博客園
相關(guān)推薦

2021-06-29 14:38:30

客戶期望值品牌挑戰(zhàn)CIO

2010-07-08 09:53:57

SQL Server

2011-10-31 10:24:03

Linux死機

2018-11-26 10:23:51

網(wǎng)絡(luò)故障路由器

2022-08-01 12:03:43

首席信息官CIOIT

2024-08-30 08:18:23

.NETDump內(nèi)存

2011-07-01 14:38:10

Novell非結(jié)構(gòu)化數(shù)據(jù)

2021-12-28 16:33:26

接口函數(shù)組合

2017-11-02 13:05:12

PC3D NAND內(nèi)存

2019-09-29 16:42:35

straceEmacsLinux

2023-11-14 16:43:17

云計算數(shù)據(jù)中心

2020-06-23 09:48:09

Python開發(fā)內(nèi)存

2013-08-07 10:16:43

Android內(nèi)存泄漏

2024-07-26 00:00:12

2018-05-28 22:44:17

代碼腐化程序員

2013-03-11 10:37:08

2023-10-24 09:30:49

Java內(nèi)存

2017-12-21 18:41:46

Java內(nèi)存泄漏代碼

2009-07-28 09:54:23

.NET內(nèi)存管理

2020-01-06 22:56:39

物聯(lián)網(wǎng)安全可穿戴設(shè)備
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品爱久久久久久久 | 亚洲国产网址 | 欧美综合视频在线 | 精品国产一区二区三区成人影院 | 91色啪| 欧美在线视频一区二区 | 在线观看中文字幕亚洲 | 国产一区二区三区免费观看在线 | 狠狠爱一区二区三区 | 精品无码久久久久国产 | 在线观看 亚洲 | 成人在线视频免费观看 | 天天色图 | 欧美一级黄色片 | 国产精品国产成人国产三级 | 999热精品 | 欧美日本高清 | 亚洲看片网站 | 亚洲一区二区三区视频 | 中文字幕av亚洲精品一部二部 | 久久精品网 | 福利网站在线观看 | 日本欧美国产在线观看 | 国产一区三区视频 | 午夜久久久 | 一区二区三区国产 | 免费观看国产视频在线 | 91九色婷婷 | 精品一区二区不卡 | 国产日产久久高清欧美一区 | 婷婷久久综合 | 91精品久久久久久久 | 日本一区二区三区在线观看 | 日本激情视频网 | 午夜精品久久久久久久星辰影院 | 国产99精品| 国产精品伦一区二区三级视频 | 日韩不卡在线 | 日韩高清中文字幕 | 国产精品久久久久久久久婷婷 | 日本手机在线 |