- 通过! FinalizeQueue检查是否有大量的SqlConnection对象等待被Finalize. 通常Finalize queue中的Connection应该为0,或者小于10。当数量超过30的时候,通常说明代码中有使用完SqlConnection后忘记及时调用Close或者Dispose的情况。
- 通过!dumpheap –stat检查内存中是否有大量的DataTable对象。如果有,通过!gcroot察看这些对象是否被保存到Session中。在Session中保存大量的数据容易导致很高的内存压力。
- 超过30个CLR线程表明程序中往往有blocking发生。
- % Processor Time :程序繁忙时,CPU平均占用率应该在80%以内,否则应该去检查high cpu的情况。其次是波动很大,在短时间内有连续较高值出现。
- ID Process:如果iis做了recycle或者asp.net程序crash了,可以看到这个值的变化
- Private Bytes:如果值在一直升高,memory leak。这个值跟taskmgr里的vm是差不多的。
- Virtual Bytes:一般与Privates Bytes成正比,比其略大。当>2倍大小的Private Bytes时,一般是fragment的问题
- Context Switch/sec:如果high cpu跟该值变化一致,一般就不是死循环了,是contention的问题。线程切换开销比较大。
- Bytes in all heaps:GC回收不了的所有object占用的总空间,只有GC在collect的时候这个值才会变化。
- %Time in GC:GC执行的频度,一般<15%,大于>20%的时候对性能会产生影响。如果负载高,内存压力大都有可能导致该值高
- Application Restarts:记录asp.net app domain重启次数。重启一般是因为bin目录下有文件改动或者web.config被改动。
- Request Execution Time:注意的是要看平均值,峰值一般不能说明什么(GC)
- Request Current:正在处理和等待处理请求数。>10时要看一下了,如果此时cpu不高,出现blocking的可能性最大。
- Request Executing:这个值应该跟cpu数一样(这个cpu数是值taskmgr里看到的cpu数,比如超线程的cpu这个值一般是2)
- Requests/sec:每秒处理请求数,几乎是衡量asp.net负载的标准。如果该值有较大波动,应该考虑Ddos的可能性。
- Request in Application Queue:该值如果>0,说明性能问题非常严重。当该值达到一定程度的时候,asp.net直接返回503。
- .NET CLR Exceptions下的# of Excepts Thrown / sec:该值如果超过20,一般就有不正常的地方。这里的exceptions包括了已经catch到的。exception是影响性能的。asp.net中的Response.End()方法调用也会有一个异常的。
posted @
2008-04-13 16:02
new 维生素C.net()
阅读(
534)
评论()
编辑
收藏
举报
点击右上角即可分享
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端