K2上海总部技术培训分享笔记
第一部门 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
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/
Windbg命令:http://www.windbg.info/doc/1-common-cmds.html
SOS命令:http://msdn.microsoft.com/zh-cn/library/bb190764(vs.80).aspx
K2上海总部技术培训分享笔记的更多相关文章
- 上海苹果维修点分享苹果电脑MACBOOK故障维修常见案例
苹果的电子设备无论是外观和性能都是无与伦比的美丽,很多开发者都开始选用苹果电脑macbook.近年来苹果售后维修点来维修苹果电脑的用户也越来越多,我们上海苹果维修点就整理分享了一些苹果电脑MACBOO ...
- 开拓新途径找出新方法,上海SEO公司分享3个操作看看是否可行
开拓新途径找出新方法,上海SEO公司分享3个操作看看是否可行 内容收录,外链公布,流量点击.用户体验.这是SEO优化的几个核心和重点.也是SEO站长每天都在绞尽脑汁进行操作的SEO重心,影响着非常多人 ...
- 上海2017QCon个人分享总结
有幸作为讲师受邀参加InfoQ在上海举办的QCon2017,不得不说,不论是从讲师还是听众的角度衡量,QCon进一步扩大了技术视野.虽然前端专题只有四场,但每一场分享都是目前的热门话题.并且Qcon的 ...
- C# 8.0和.NET Core 3.0高级编程 分享笔记二:编程基础第二部分
这一篇是接上一篇笔记的第二部分. 2.5深入研究控制台应用程序 前面创建并使用了基本的控制台应用程序,下面更深入地研究它们. 控制台应用程序是基于文本的,在命令上运行的.它们通常执行需要编写脚本的简单 ...
- Elasticsearch 趋势科技实战分享笔记
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484113&idx=1&sn=6c40d7f ...
- MongoDB入门分享-笔记整理精选
最近在学习MongoDB,怕以后忘记,自己做了一个整理,给不知道的小伙伴一起分享学习一下. 第一步> 首先到官网下载,安装MongoDB.(注意MongoDB还有一个可视化管理工具叫: Mong ...
- WizNote分享笔记至博客
右边的分享按钮 选中后出现如图所示 然后可以进行分享了
- C++分享笔记:扑克牌的洗牌发牌游戏设计
笔者在大学二年级期间,做过的一次C++程序设计:扑克牌的洗牌发牌游戏.具体内容是:除去大王和小王,将52张扑克牌洗牌,并发出5张牌.然后判断这5张牌中有几张相同大小的牌,是否是一条链,有几个同花等. ...
- C++分享笔记:5X5单词字谜游戏设计
笔者在大学二年级刚学完C++程序设计后,做过一次课程设计,题目是:5X5单词字谜游戏设计.为了设计算法并编写程序,笔者在当时颇费了一番心力,最后还是成功地完成了.设计中不乏有精妙之处.该程序设计完全是 ...
随机推荐
- Python 学习笔记 - 10.类(Class) 1
定义 Python 的 Class 比较特别,和我们习惯的静态语言类型定义有很大区别. 1. 使用一个名为 __init__ 的方法来完成初始化.2. 使用一个名为 __del__ 的方法来完成类似析 ...
- 每一个程序员需要了解的10个Linux命令
作为一个程序员,在软件开发职业生涯中或多或少会用到Linux系统,并且可能会使用Linux命令来检索需要的信息.本文将为各位开发者分享10个有用的Linux命令,希望对你会有所帮助. 以下就是今天我们 ...
- 20160805_Cent6.4x64_安装配置(含网卡驱动的配置)
ZC: 全程 root用户 操作. 1.我在BIOS中将 UEFI关闭了,然后 才安装的 Cent6.4x64 (ZC: 安装系统时,一起安装了 gcc等一些编程用的包.本来是想安装QT时少点麻烦的, ...
- hiho_1079_离散化
题目 在长度为L的宣传栏上张贴N张海报,将宣传栏分为L个长度为1的单位,海报长度为整数,且高度和宣传栏相同,左右边界和宣传栏单位之间缝隙重合(即海报总是跨越整数个单位).后贴的海报可能会覆盖之前贴的海 ...
- 论APP测试中黑盒测试方案的重要性?
运筹帷幄之中,决胜千里之外.古人足不出户,通过正确的部署就能决定千里之外战争的胜利!而于测试人员而言,制定正确的测试方案,就是日后测试就是是否顺利的决定性因素. 在整个测试过程中,对测试人员.资源以及 ...
- mysql 截断
当id为int是,如果是10位数,可以插入,primary key不能重复插入,其默认值可以为NULL一个varchar字段的值如果长度设定为255,则如果其长度为256也可以插入,但已经被截取到了2 ...
- java 反射机制的实例
[案例1]通过一个对象获得完整的包名和类名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package Reflect; /** * 通过一个对象获得完整的包名和类名 ...
- Docker 使用指南 (二)—— 搭建本地仓库
版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/94 来源:腾云阁 https://www.qclou ...
- Eclipse远程调试出现“JDWP Transport dt_socket failed to initialize”的解决方案
欢迎关注我的社交账号: 博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html GitHub地址: https://github.com/ji ...
- h5新增标签兼容性
<address> 标签定义文档或文章的作者/拥有者的联系信息. 兼容所有浏览器 <area> 标签定义图像映射中的区域(注:图像映射指得是带有可点击区域的图像).兼容所有浏 ...