设置好符号文件的路径,符号服务器的设置方法 :SRV*本地保存路径*符号文件服务器路径
不带"."随意敲一个命令似乎会导致windbg自动下载所有的pdb文件以试图执行该命令
使用.loadby sos mscorwks应该可以保证载入正确的版本,而不会出现No valid SOS data table found的错误
如果机器上装有两个不同版本的.net framework的话,可以使用绝对路径来保证加载正确的版本
使用adplus.vbs 创建一个crash状态下asp.net进程的full dump的命令为 :adplus.vbs -pn aspnet_wp.exe -crash -quiet -o c:/path
windbg中使用组合指令的例子
.foreach ( obj {!dumpheap -mt 79124418 -short}){!objsize ${obj}}
.foreach (obj {!do -v 0x06269fd0 -short}){.echo ***;!do poi(${obj}+0x4);!do poi(${obj}+0x8);!objsize ${obj}}
对于高CPU占用,一般的是这三个原因:
· 高的离谱的循环
· 太多的加载(比如,许多小的对象被频繁的处理)
· GC作了太多的事情
使用 ~* e !clrstack可以 查看活动线程的堆栈
二代对象和一代对象的理想回收速率应该是1:10
GC占用大量的CPU时间,通常是由于Large object heap的过度使用
Large object heap 的过度使用通常由大Viewstate导致
大的viewstate通常由页面包含大量的表格数据,大量的自定义viewstate造成
有以下异常通常代表很大的viewstate,是由于viewstate校验失败引起
_ASP.AllThePeople_aspx === System.Web.HttpException: Invalid_Viewstate_Client_Disconnected Client IP: 141.150.12.56 Port: 62164 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0....) ViewState: dDwtNjY5ODIyMjI4O3Q8cDxsPFNUQVJUREFURTtFTkREQVRFO1BMVVN
可以设置WAS以阻止失效进程响应任何请求,同时保证进程继续运行;这就是所谓的隔离失效进程.一个隔离的工作进程被从应用程序池中移除,但将其保留在失效状态以便调试.这样,WAS开始另外一个工作线程所以应用可以继续响应请求.
隔离应用程序池中失效的进程,在/Inetpub/Adminscripts目录下执行:
cscript adsutil.vbs set w3svc/apppools/orphanworkerprocess 1 //该命令应用到所有应用程序池
应用到单独的应用程序池,使用:
cscript adsutil.vbs set w3svc/apppools/应用程序池名称/orphanworkerprocess 1
这样设置过之后,失效的w3wp.exe进程不会被中止,而是会停留在失效的状态,这样就可以使用调试器附加到进程,然后找出失效的原因.