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

简介: 原文:【原创】构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)—托管资源优化—监测CLR性能构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)—托管资源优化—监测CLR性能     前言:在上一篇文章中讲述了一些垃圾回收的一些知识,本篇就讲述如何来监测CLR是否导致了一些性能问题。
原文: 【原创】构建高性能ASP.NET站点 第七章 如何解决内存的问题(前中篇)—托管资源优化—监测CLR性能

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

    前言:在上一篇文章中讲述了一些垃圾回收的一些知识,本篇就讲述如何来监测CLR是否导致了一些性能问题。 

 

本篇的议题如下:

内存问题概述(前篇)

托管资源优化(前篇)

         对象的生命周期(前篇)

         对象的代“(前篇)

         大对象堆(LOH) (前篇)

         CLR计数器的使用         (中篇)

         CLR Profiler的使用(中篇)

         垃圾回收器的不同版本(中篇)

         对象使用注意事项(后篇)

         常用优化措施(后篇)

非托管资源优化

Session会话的优化

 

  系列文章链接:

  构建高性能ASP.NET站点 开篇

  构建高性能ASP.NET站点之一 剖析页面的处理过程(前端)

  构建高性能ASP.NET站点之二 优化HTTP请求(前端)

  构建高性能ASP.NET站点之三 细节决定成败

  构建高性能ASP.NET站点 第五章—性能调优综述(前篇)

  大型高性能ASP.NET系统架构设计  

  构建高性能ASP.NET站点 第五章—性能调优综述(中篇)

  构建高性能ASP.NET站点 第五章—性能调优综述(后篇)

  构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(上篇)—识别性能瓶颈

  构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(下前篇)—简单的优化措施

  构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(下后篇)—减少不必要的请求

  构建高性能ASP.NET站点 第七章 如何解决内存的问题(前篇)—托管资源优化—垃圾回收机制深度剖析

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

 

 

     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 sizeGen 1 heap sizeGen 2 heap sizeLarge Object Heap size所有的种和,也就是整个托管堆所占的空间大小

# Gen 0 Collections

从系统开启之后到现在,垃圾回收器回收Gen 0对象的次数

# Gen 1 Collections

从系统开启之后到现在,垃圾回收器回收Gen 1对象的次数

# Gen 2 Collections

从系统开启之后到现在,垃圾回收器回收Gen 2对象的次数

介绍完上面的一些计数器之后,大家可以运行perfmon命令,打开性能监测工具。

 

下面开始介绍CLR ProfilerCLR 透析器)

 

     CLR Profiler

CLR Profiler是微软开发的一个工具,这个工具可以用来检测CLR所占用的内存详情。

大家可以去下面的链接去下载这个工具:

http://www.microsoft.com/downloads/details.aspx?familyid=a362781c-3870-43be-8926-862b40aa0cd0&displaylang=en 

下面的链接详细的讲述这个工具的用法:

         http://msdn.microsoft.com/zh-cn/magazine/ee309515.aspx#MtViewDropDownText

        

         在这里,只是简单的介绍一下如何使用,至于详细的操作,还请大家去查看上面给出的链接。使用的步骤如下:

1.       运行CLR Proflier

2.       确保Profiling active, Allocations, Calls都勾选上。如下:

 

3.       选择File->Profile ASP.NET”.这个操作的背后会停止IIS的运行,然后插入一些指令,然后重启IIS,所以这个工具在生产环境中慎用。

 

4.       然后我们可以在VSF5运行我们的网站(确保在创建网站的时候是以IIS方式来建立站点的,而不是选择文件系统的方式建立)

5.       在界面上面点击Kill ASP.NET”.这个操作的背后会移除之前加入到IIS中的一些监视指令。点击按钮之后,会出现一些界面。这个界面上面显示了Gen0, Gen1 Gen2 ,LOH所占的大小,如下:

 

6.       我们还可以点击Histogram按钮。这个界面展示了不同大小以及不同类型的对象所占的比例。下面对看出,系统中有很多的string对象,也就说,系统中的string类型的对象占据了系统大部分的内存空间。

 

         大家可以查看更多的信息,这里不再赘述了,下面我们来看看垃圾回收器的版本问题。

 

    垃圾回收器版本

    在CLR中,垃圾回收器是有两个版本的:

1.       服务端版本。CLR中的这个垃圾回收器版本进行了一系列的内存,处理器优化,用来进一步的提高性能。

2.       工作组版本,这是相对服务端版本而言的,主要是用在桌面开发中,例如在WPFWinform中,就是采用的这个版本垃圾回收器。

 

    在ASP.NET中就是采用的CLR服务端版本的垃圾回收器。

 

      OK,今天就暂时写到这里,下一篇讲述一些针对上述问题的一些优化措施。

目录
相关文章
|
9天前
|
运维 DataWorks 安全
DataWorks产品使用合集之如何查看空间资源、CPU、内存和存储空间容量
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
18天前
|
缓存 弹性计算 数据库
阿里云2核4G服务器支持多少人在线?程序效率、并发数、内存CPU性能、公网带宽多因素
2核4G云服务器支持的在线人数取决于多种因素:应用效率、并发数、内存、CPU、带宽、数据库性能、缓存策略、CDN和OSS使用,以及用户行为和系统优化。阿里云的ECS u1实例2核4G配置,适合轻量级应用,实际并发量需结合具体业务测试。
6 0
阿里云2核4G服务器支持多少人在线?程序效率、并发数、内存CPU性能、公网带宽多因素
|
8天前
|
机器学习/深度学习 分布式计算 大数据
MaxCompute产品使用合集之如何查看空间资源、CPU和内存以及存储空间容量
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
11天前
|
SQL 资源调度 关系型数据库
实时计算 Flink版产品使用问题之在使用Flink on yarn模式进行内存资源调优时,如何进行优化
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
16天前
|
存储 设计模式 监控
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
25 0
|
16天前
|
存储 安全 Java
Java面试题:假设你正在开发一个Java后端服务,该服务需要处理高并发的用户请求,并且对内存使用效率有严格的要求,在多线程环境下,如何确保共享资源的线程安全?
Java面试题:假设你正在开发一个Java后端服务,该服务需要处理高并发的用户请求,并且对内存使用效率有严格的要求,在多线程环境下,如何确保共享资源的线程安全?
23 0
|
16天前
|
存储 安全 Java
Java面试题:请解释Java内存模型,并说明如何在多线程环境下使用synchronized关键字实现同步,阐述ConcurrentHashMap与HashMap的区别,以及它如何在并发环境中提高性能
Java面试题:请解释Java内存模型,并说明如何在多线程环境下使用synchronized关键字实现同步,阐述ConcurrentHashMap与HashMap的区别,以及它如何在并发环境中提高性能
14 0
|
16天前
|
存储 算法 安全
Java面试题:给定一个可能产生内存泄漏的场景,如何诊断并解决?实现一个生产者-消费者模型,使用适当的同步机制与并发工具类,Java并发工具包与框架:性能与调优
Java面试题:给定一个可能产生内存泄漏的场景,如何诊断并解决?实现一个生产者-消费者模型,使用适当的同步机制与并发工具类,Java并发工具包与框架:性能与调优
14 0
|
24天前
|
缓存 算法 UED
操作系统中的内存管理技术及其性能影响
在现代计算机系统中,操作系统的内存管理机制对系统性能有着至关重要的影响。本文将深入探讨内存管理的关键技术,包括虚拟内存、分页和分段,以及它们如何影响系统的响应速度和资源利用效率。通过分析不同内存管理策略的性能表现,并结合最新的研究成果,本文旨在为读者提供关于优化内存管理以提高系统性能的实用指导。
|
25天前
|
存储 监控 算法
Java内存管理策略与性能调优
Java内存管理策略与性能调优