第一部门 WinDdg 入门指南

1、NGen.exe --> native code 预编译,省去了.NET程序编译器JIT过程,是程序第一次运行也非常快。

NGen 参考资料:http://msdn.microsoft.com/zh-cn/library/6t9t5wcf.aspx

2、在不同版本下查看dump

.NET 2.0/.NET 3.0/.NET 3.5

!loadby sos mscorwks或!loadby [sos文件路径]

.NET 4.0

!loadby sos clr

3、查看dump中Appdomain,assembly, module,mt使用的基本语法,!dump+查看的类型

!dumpdomain    查看所有的appdomain

!dumpassembly xxxxxx   查看指定的应用程序集

!dumpmodule xxxxxx –mt     查看指定类(模块)

!dumpmd xxxxxx    查看方法

!u: 查看二进制汇编代码

!dumpil [地址代码]:根据内存地址查看中间代码

Adplus.exe/adplus.vbs:抓取dump的文件,版本不同,会有不同adplus文件

-hang/-crash:使用adplus抓取dump的参数,二者选其一,建议生产环境中不要使用-crash

!eeheap/!eestack: 一个进程一个栈,一个栈是1M内存

!clrstack:看程序堆栈调用情况,也看托管代码

!thread:看托管线程

!~:看所有线程

1个thead的栈默认空间:1MB ,如果有2000个线程,2G的内存就挂了;

一般设计最好是用线程池,控制总的线程数

~1s [切换到1号线程]

!clrstack [查看该线程的托管代码调用堆栈,可以看到该线程所执行的线程方法]

!dumpstack 查看堆栈跟踪(非托管和托管的堆栈都显示)

KB 看二进制,费托管代码

!dso  查看目前栈上的所有对象

!help 查看帮助

第二部分 WinDbg 实战

2g * 60% = 1.2g   : 32位的操作系统,ASP.NET程序默认可以使用的最大内存大小

调整ASP.NET最大使用内存比例

machine.config comment

processmodel

memorylimit = "60"

client --> iis(超过5000,进入queue) --> thread pool(超过20*8,进入queue)

managed heap 托管堆

loader heap 引用堆

public class demo {
int a = ; //heap
public void F1() {
int b = ; // stack
}
}

lock(this) 不好,lock(typeof(..)) 最不好不要lock值类型。

垃圾回收过程(GC) :

iis w3wp : 100 threads,其中挂起, 60 managed threads(挂起时,所有的managed线程都不会工作)

suspendEE

Mark :找对象有没有ROOT的对象 引用ROOT

PLAN:

restartEE

标记没有根的对象,删除掉,整理内存(Compact,使内存整片存在,避免OOM),把G0中没有删除的对象,COPY到G1 。

当新对象来的时候,G0有可能有两种:1是扩展 ,2是回收

当G1满的时候,G1 -> G2

g0:g1:g2(回收次数)

正常情况下:100:10:1

如果G0,G1,G2回收次数都基本相同时,说明内存不够用,频繁的FULL GC,OOM ,内存的碎片也会形成的OOM

.NET CLR Memory 性能计数器

This counter displays the current size of the Large Object Heap in bytes. Objects greater than 20 85 KBytes are treated as large objects by the Garbage Collector and are directly allocated in a special heap; they are not promoted through the generations. This counter is updated at the end of a GC; its not updated on every allocation.

%time in gc (10%~ 15%) < 20%

LOH

1.只有在FULL GC时才会回收

2.回收时,不会做Compact压缩转移(可能会出现碎片)

if broker it

http://blogs.msdn.com/b/tess/archive/2008/02/04/net-debugging-demos-information-and-setup-instructions.aspx

tinyget -srv:localhost

http://support.microsoft.com/kb/840671/zh-cn

debugdiag c++

adplus_old -hang -pn w3wp.exe -quiet -o c:\dumps

(抓的话,会挂起)

Mem usage 物理内存会涨

quiet:交互方式

高内存的分析步骤:

1. 是否.NET内存使用的多

2.内存占用比例

3.占用内存最大的几种对象

4.为什么没有垃圾回收(找到ROOT)

!eeheap -gc  (查看.NET使用的大小)

!dumpheap -stat (得到内存占用比例,相当于Group by)

!dumpheap -type stystem.string = !dumpheap -mt 1342112

!dumpheap -mt XXXX -min 20019 -max 20021 -stat

!gcroot XXXXXX(随机找一个ID,查出Root)

!finalizequeue

!runaway (查看线程的CPU使用时间)

.time 指定线程的CPU使用时间

Finalize

public class link {
~Link() //Finalize
}

如果写了析构函数,对象需要2次GC才释放

Finalize Thread进行Finalize queue

High MEM会导致High CPU 因为垃圾回收导致的

logfiles

iisweb /query

httperr 大于400的错误

eventvwr

.symfix + c:\symbols 加装符号表 (下载PDB)

.reload

Kb   看二进制的

>>>  当前运行的行

!objectsize 121212  看对象的大小

!do

.time

!runaway

~11s

.loadby sos mscorwks

!clrstack

!u 1212312

>>>

!ip2md 1212312

IIS recycle 建议使用

~* e!clrstack 看所有线程

!syncblk 查看lock的线程(分析)

.chain 查看SOS

DW20.EXE --> doctor watson 出问题的时候诊断进程

server unavailable 通过IIS的站点的应用程序池设置失败保护

1st chance 一般从这个开始查

2chance 比较严重,Exception 已经抛到OS

adplus_old - -pn w3wp.exe -quiet -o c:\dumps

-fullonfirst

sxe clr 开启Exception的抓取

!pe 打印异常

stackoverflow  1M / 4 = 25w次的调用   a里面调b, b里面调用a

性能计数器alert ,当某个计数器的值达到某个阀值时,可以执行某个程序。

第三部分   SQL Server 调优

设置SQL Server的内存使用

16g -> 12000(m)

32g -> 26~28

64g -> 56~58

原则:需要给系统留4~6g内存

max degree of pata 最大并行度: 设置成1(有几个solts CPU设成几)

X86 用4G以上的内存

1.AWE 勾上

2.需要改boot.ini

3.组策略

lock pages memery

数据库文件推荐的增长策略 200M

select count(0) from _line with(nolock)

逻辑读 是以page为单位

RID lookup 文件号 非聚集时的指针到内容的查找

search arguments

创建索引的推荐办法:

create index  ix

(cond1,cond2,cond3) ---条件列

include(col1,col2,col3) ---数据输出列

在创建索引时可以增加条件,当符合条件时才使用该索引,该特性对于少众数据的筛选非常有用( type中80%是1 , 15%是2, 5%是3 )

create index  ix

where type=3

查看系统认为缺失的索引

sys.dm_db_missing_index_details

dbcc traceon(1222,3605,-1) 开启死锁的日志 >= sql2005

-1代表所有的库

select db_id('dbname1')

监控中starting没用

proc stmcompleted 记录存储过程中所有语句的执行情况

sys.sysprocesses 查看SQL Server中的进程情况

select @spid 查看SQL当前进行的编号

reads > 10000

user connections        :sql general statistics

batch requests            :sql statistics

page file expectancy :sql buffer manager

第四部分 一些有用的网址

鞠强博客:http://www.cnblogs.com/juqiang/

鞠强同事博客:http://www.cnblogs.com/StevenChennet/

Tess博客:http://blogs.msdn.com/b/tess/archive/2008/02/04/net-debugging-demos-information-and-setup-instructions.aspx

Windbg命令:http://www.windbg.info/doc/1-common-cmds.html

SOS命令:http://msdn.microsoft.com/zh-cn/library/bb190764(vs.80).aspx

K2上海总部技术培训分享笔记的更多相关文章

  1. 上海苹果维修点分享苹果电脑MACBOOK故障维修常见案例

    苹果的电子设备无论是外观和性能都是无与伦比的美丽,很多开发者都开始选用苹果电脑macbook.近年来苹果售后维修点来维修苹果电脑的用户也越来越多,我们上海苹果维修点就整理分享了一些苹果电脑MACBOO ...

  2. 开拓新途径找出新方法,上海SEO公司分享3个操作看看是否可行

    开拓新途径找出新方法,上海SEO公司分享3个操作看看是否可行 内容收录,外链公布,流量点击.用户体验.这是SEO优化的几个核心和重点.也是SEO站长每天都在绞尽脑汁进行操作的SEO重心,影响着非常多人 ...

  3. 上海2017QCon个人分享总结

    有幸作为讲师受邀参加InfoQ在上海举办的QCon2017,不得不说,不论是从讲师还是听众的角度衡量,QCon进一步扩大了技术视野.虽然前端专题只有四场,但每一场分享都是目前的热门话题.并且Qcon的 ...

  4. C# 8.0和.NET Core 3.0高级编程 分享笔记二:编程基础第二部分

    这一篇是接上一篇笔记的第二部分. 2.5深入研究控制台应用程序 前面创建并使用了基本的控制台应用程序,下面更深入地研究它们. 控制台应用程序是基于文本的,在命令上运行的.它们通常执行需要编写脚本的简单 ...

  5. Elasticsearch 趋势科技实战分享笔记

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484113&idx=1&sn=6c40d7f ...

  6. MongoDB入门分享-笔记整理精选

    最近在学习MongoDB,怕以后忘记,自己做了一个整理,给不知道的小伙伴一起分享学习一下. 第一步> 首先到官网下载,安装MongoDB.(注意MongoDB还有一个可视化管理工具叫: Mong ...

  7. WizNote分享笔记至博客

    右边的分享按钮  选中后出现如图所示  然后可以进行分享了    

  8. C++分享笔记:扑克牌的洗牌发牌游戏设计

    笔者在大学二年级期间,做过的一次C++程序设计:扑克牌的洗牌发牌游戏.具体内容是:除去大王和小王,将52张扑克牌洗牌,并发出5张牌.然后判断这5张牌中有几张相同大小的牌,是否是一条链,有几个同花等. ...

  9. C++分享笔记:5X5单词字谜游戏设计

    笔者在大学二年级刚学完C++程序设计后,做过一次课程设计,题目是:5X5单词字谜游戏设计.为了设计算法并编写程序,笔者在当时颇费了一番心力,最后还是成功地完成了.设计中不乏有精妙之处.该程序设计完全是 ...

随机推荐

  1. unicode 和 utf-8 的关系和解释

    首先一个字节就是8个晶体管同时发出的信号集, unicode就是一套编码,所有的字符都用2个字节表示,不像gbk和gb2312既保持了以前的ansi/ascii的字符单个字节编码,有发明了两个字节保存 ...

  2. 2010 word 如何新建目录

    首先插入一个bullet 填充内容,编好编号,选择文字,右键,然后选择相应的level,然后点击一级菜单reference, 然后点击table of contents, 选择某一个样式,然后插入成功 ...

  3. x+y = ((x&y)<<1) + (x^y) 证明

    法一:我们考虑x,y在二进制表示时候,按位相加其中第i位xi+yi = ((xi&yi)<<1) + (xi^yi)其中(xi&yi)<<1表示当xi和yi都是 ...

  4. linux redis 安装

    linux下redis安装   我用的系统是:redhat [root@infa ~]# wget http://download.redis.io/releases/redis-2.8.12.tar ...

  5. @ExceptionHandler

    @Controller public class AccessController { /** * 异常页面控制 * * @param runtimeException * @return */ @E ...

  6. 笔记13:File 类的一些操作

    一.对文件的创建(create) private void button1_Click(object sender, EventArgs e) { File.Create(@"F:\\QQP ...

  7. JSCore的基本使用

    一.简单介绍 JSCore全称为JavaScriptCore,是苹果公司在iOS中加入的一个新的framework.该framework为OC与JS代码相互操作的提供了极大的便利.该工程默认是没有导入 ...

  8. IOS-错误总结

    1,警告:"xoxoxoxo"  is deprecated解决办法:查看xoxoxoxo的这个方法的文档,替换掉这个方法即可.2,警告:Declaration of " ...

  9. Android之ScrollView嵌套ListView

    在ScrollView中嵌套使用ListView,ListView只会显示的内容只有一行多一点 解决方案: public class Utility { public void setListView ...

  10. Javascript 严格模式详解(转)

    一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. ...