构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)—托管资源优化—监测CLR性能

简介:
构建高性能ASP.NET 站点  第七章  如何解决内存的问题( 前中篇)— 托管资源优化监测CLR 性能
    前言:在上一篇文章中讲述了一些垃圾回收的一些知识,本篇就讲述如何来监测CLR 是否导致了一些性能问题。 
 
本篇的议题如下:
内存问题概述( 前篇)
托管资源优化(前篇)
          对象的生命周期(前篇)
          对象的 代“(前篇)
          大对象堆(LOH)  (前篇)
         CLR 计数器的使用          (中篇)
         CLR Profiler 的使用(中篇)
          垃圾回收器的不同版本(中篇)
          对象使用注意事项(后篇)
          常用优化措施(后篇)
非托管资源优化
Session 会话的优化
 
     CLR 计数器的使用
我们使用系统自带的性能监测工具来跟踪和监测垃圾回收器。
下面,首先介绍几个常用的CLR 性能监测计数器,我们一般查看 .NET CLR Memory 分类下的计数器:
Percent Time in GC
表明了从上次垃圾回收机制运行之后到现在这段时间内,运行垃圾回收机制所花的时间占总时间的百分比。不要超过10%
Gen 0 heap size
这个数值不是表明当前托管堆中Gen 0 对象所占的大小,而是指:还可以分配的Gen 0 对象的大小
Gen 1 heap size
表明当前Gen 1  对象所占的托管堆的空间大小
Gen 2 heap size
表明当前Gen 2  对象所占的托管堆的空间大小
Large Object Heap size
当前LOH 的大小
# Byte in all Heaps
是上面 Gen 0 heap size Gen 1 heap size Gen 2 heap size Large Object Heap size 所有的种和,也就是整个托管堆所占的空间大小
# Gen 0 Collections
从系统开启之后到现在,垃圾回收器回收Gen 0 对象的次数
# Gen 1 Collections
从系统开启之后到现在,垃圾回收器回收Gen 1 对象的次数
# Gen 2 Collections
从系统开启之后到现在,垃圾回收器回收Gen 2 对象的次数
介绍完上面的一些计数器之后,大家可以运行perfmon命令,打开性能监测工具。
 
下面开始介绍CLR Profiler CLR  透析器)
 
     CLR Profiler
CLR Profiler 是微软开发的一个工具,这个工具可以用来检测CLR 所占用的内存详情。
大家可以去下面的链接去下载这个工具:
下面的链接详细的讲述这个工具的用法:
        
          在这里,只是简单的介绍一下如何使用,至于详细的操作,还请大家去查看上面给出的链接。使用的步骤如下:
1.        运行CLR Proflier
2.        确保Profiling active, Allocations, Calls都勾选上。如下:
 
3.        选择File->Profile ASP.NET”. 这个操作的背后会停止IIS 的运行,然后插入一些指令,然后重启IIS ,所以这个工具在生产环境中慎用。
 
4.        然后我们可以在VS F5 运行我们的网站( 确保在创建网站的时候是以IIS 方式来建立站点的,而不是选择 文件系统 的方式建立)
5.        在界面上面点击Kill ASP.NET”. 这个操作的背后会移除之前加入到IIS 中的一些监视指令。点击按钮之后,会出现一些界面。这个界面上面显示了Gen0, Gen1 Gen2 ,LOH 所占的大小,如下:
 
6.        我们还可以点击Histogram按钮。这个界面展示了不同大小以及不同类型的对象所占的比例。下面对看出,系统中有很多的string 对象,也就说,系统中的string 类型的对象占据了系统大部分的内存空间。
 
          大家可以查看更多的信息,这里不再赘述了,下面我们来看看垃圾回收器的版本问题。
 
    垃圾回收器版本
    在CLR 中,垃圾回收器是有两个版本的:
1.        服务端版本。CLR 中的这个垃圾回收器版本进行了一系列的内存,处理器优化,用来进一步的提高性能。
2.        工作组版本,这是相对服务端版本而言的,主要是用在桌面开发中,例如在WPF Winform 中,就是采用的这个版本垃圾回收器。
 
    在ASP.NET 中就是采用的CLR 服务端版本的垃圾回收器。
 
      OK ,今天就暂时写到这里,下一篇讲述一些针对上述问题的一些优化措施。





















本文转自yanyangtian51CTO博客,原文链接: http://blog.51cto.com/yanyangtian/497151  ,如需转载请自行联系原作者


相关文章
|
30天前
|
开发框架 缓存 前端开发
利用Visual Basic构建高效的ASP.NET Web应用
【4月更文挑战第27天】本文探讨使用Visual Basic与ASP.NET创建高效Web应用的策略,包括了解两者基础、项目规划、MVC架构、数据访问与缓存、代码优化、异步编程、安全性、测试及部署维护。通过这些步骤,开发者能构建出快速、可靠且安全的Web应用,适应不断进步的技术环境。
|
开发框架 JSON 缓存
基于 Debain11 构建 asp.net core 6.x 的基础运行时镜像
此处我们基于 Debian11 的 Linux 发行版,实现目标是编写 Dockerfile 构建 asp.net core 6.x 框架的 runtime 基础镜像。在 Docker 容器化运行环境中,应用程序运行中存在异常情况,此时可以借助一些常用的基础工具方便排查,因此我们需要在 asp.net core 6.x runtime 基础镜像添加 linux 环境常用的...
291 1
基于 Debain11 构建 asp.net core 6.x 的基础运行时镜像
|
开发框架 安全 .NET
『部署实操』使用 IIS 在 Windows 上托管 ASP.NET Core
使用 IIS 在 Windows 上托管 ASP.NET Core
655 0
『部署实操』使用 IIS 在 Windows 上托管 ASP.NET Core
|
开发框架 .NET 开发工具
|
Web App开发 .NET C++
使用 IIS 在 Windows 上托管 ASP.NET Core2.0
原文:使用 IIS 在 Windows 上托管 ASP.NET Core2.0 准备: 操作系统:Windows Server 2008 R2 或更高版本 开发环境:VS2017 第一步:新建项目ASP.NET Core Web应用程序 在 Visual Studio 中,选择“文件”>“新建”>“项目”。
1259 0
|
JSON 前端开发 .NET
如何构建ASP.NET MVC4&JQuery&AJax&JSon示例
背景:   博客中将构建一个小示例,用于演示在ASP.NET MVC4项目中,如何使用JQuery Ajax。 步骤: 1,添加控制器(HomeController)和动作方法(Index),并为Index动作方法添加视图(Index.cshtml),视图中HTML如下: 输入你的姓名: 输入你的年龄: 提交 清空   视图中包含两个文本框,分别用来输入名字和年龄,包含连个按钮,分别用来提交信息和清空文本框的内容,同时包含一个段落,用来显示Ajax返回的数据信息。
1060 0
|
前端开发 .NET API
ASP.NET Core MVC中构建Web API
在ASP.NET CORE MVC中,Web API是其中一个功能子集,可以直接使用MVC的特性及路由等功能。 在成功构建 ASP.NET CORE MVC项目之后,选中解决方案,先填加一个API的文件夹,填加后,选中API文件夹, 选择新建项,选择填加Web API控制器,要注意控制器在命名时,是以Controller结尾的,这个不能改,前面的随意,比如,此处以NoteController.cs为例 填加后,打开NoteController.cs,系统已经帮我们构建好了一些基础的功能,我们需要在其基础上进行一些个性化修改使其成为我们自己的代码。
1073 0
|
Web App开发 移动开发 .NET