判定方法: 1 在任务管理器中增加显示 pid 字段。就可以看到占用内存或者 cpu 最高的进程 pid ! 2 在命令提示符下运行 iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到 pid 对应的应用程序池。 3 到 iis 中察看该应用程序池对应的网站就可以了!然后真对站点排除错误!(如果运行后出现 error - no no results 这样的提示,说明你的站点没有开启或还没有被访问过!) 解决方法: 1 尝试删除系统路径\System32\Logfiles\W3SVC1 下当天的错误日志文件,如:ex060904.log,然后重新启动IIS,等待一段时间,看看有没有问题。 注:有时非法重启或者写入日志错误都有可能造成 w3wp.exe 进程锁死。 2 设置应用程序池的CPU监视,不超过25%,每分钟刷新,超过限制时自动关闭。 注:此方法只能用来做为测试,在真正的环境下,这个可能会引起网站时好时坏。不推荐长期使用。 3 检查你的程序代码,或者网页调用,程序没写好或者有死循环,是最容易造成 w3wp.exe 锁死的。 注:方法是先停止IIS,再删除当天的网站日志(系统路径\System32\Logfiles\对应的网站目录下),然后开启IIS,等待CPU高占用的出现,这时在1分钟内打开新建的日志文件,按出现时间,对应检查里面所罗列出现的文件,检查代码是否有问题。 4 检查数据库完整性和 ODBC 的有效性。 注:有些写得不好的 ASP 程序,在访问数据库无法做到容错性,所以有些时候数据库损坏或者 ODBC 传送数据不正常,都有可能造成多次强制查询,从而体现为 w3wp.exe 高 CPU 占用。 5 检查文件的权限。 注:不要奇怪,某些时候真的出现这种事情,一个文件无法写入或者无法读取,都会引起很大的问题。 ---------------------------- 以上才是真正的解决手段和方法,网上流传的资料,不是很让人满意。 就我自己网站来说吧,原因在于 LinPHA 这个相册系统,不知道为什么,这个系统,在收到非标准的搜索 search 代码时,就会出现变量无法赋值的问题。 在调试的时候,我就发现了,Google Bot 在搜索时,能准确的识别出我的语言代码页,搜索所赋值的变量数值合法,所以不出问题。 而遇到 Baidu 蜘蛛时却就有意外发生了,因为 Baidu 本身不认 Unicode 代码,所以他会将你的代码页当成 GBK 来搜索,自然在 Unicode 的搜索页里就出现赋值不是合法数值的问题,然后导致运算出错,最后把w3wp.exe 锁死,等90秒或者更长时间,系统强制回收变量时,才能自动恢复。 这就是前段时间,本站访问不正常的根本原因。
接着附件进程到w3wp调试,注意红框,可能找不到w3wp(需开启IIS服务) ? 接着点击确定开始IIS调试.
和一个没有信心处理的BUG,那就是在应用程序启动时有可能会导致cpu跑满99%或持续在一个值如50%左右,这样一来对服务器的压力是非常大的,经常出现服务器无法远程的状态,唯有通过PowerShell杀掉对应的w3wp 2.后来记得有用过WinDbg解决过电脑蓝屏的问题,就猜想是否可以抓取对应w3wp进程的dump进行分析。 使用WinDbg查找线索 1.由于服务器是2008R2抓取dump就变得异常简单。 ?
同时,设置同时运行的w3wp进程数目为1.再设置当内存或者cpu占用超过多少,就自动回收内存 一般来说,这样就可以解决了。但仍然会出现个别网站因为程序问题,不能正确释放。 在找到问题以前可以暂时采取限制w3wp进程CPU使用率的方法保证网站可以将就着工作: 在IIS6下,经常出现w3wp.exe的内存及CPU占用不能及时释放,从而导致服务器响应速度很慢。 根据w3wp取得是哪一个应用程序池: 1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid 2、在命令提示符下运行iisapp -a。
而ASP.NET Core 2.2里新增了InProcess模式,可以在IIS自己的w3wp进程中跑你的应用。这个InProcess的In也就是In在了w3wp里的意思。
然后build一下就可以在浏览器里面刷新到最新的修改了,也可以附加到w3wp的进程进行调试。 使用附加到进程调试IIS中的Asp.Net Core 由于Asp.Net Core是单独运行的Console应用,所以调试部署在IIS中的Asp.Net Core的时候就不是像之前那样附加到w3wp进程了
但是客观情况是office组件其版本兼容问题比较多(Excel版本不一致导致无法使用、excel进程无法回收、导致w3wp进程崩溃等), 无法把控摒弃之。
观察任务管理器,发现内存占用一下就降下来了,原来是之前的进程直接奔溃了,重启了一个W3WP进程。 既然直接从任务管理器无法创建,就使用第三方工具收集Dump吧。 procdump w3wp -m 20480 -o D:\Dumps (当内存超过20G时抓取一个w3wp进程的MiniDump) 上面就是我踩得第一个坑,因为默认抓取的是MiniDump,很快就抓下来 procdump w3wp -ma -m 20480 -o D:\Dumps (当内存超过20G时抓取一个w3wp进程的完整Dump) 结果再一次,当内存占用到达20G,占比80%的时候,Dump再次创建失败 大致的意思是说,当90S内Dump文件没有成功创建的话(也就意外这w3wp进程被挂起了90s),IIS检测到w3wp进程挂起超过90s没有响应就会终止进程,重现创建一个新的进程。好嘛,真是处处是坑。 procdump w3wp -ma -m 8000 -o D:\Dumps (当内存超过8000M时抓取一个w3wp进程的完整Dump,并输出到D:\Dumps文件夹) 此时内存占用在40%左右,这次
在w3wp进程中就可以找到remoting寄宿的进程。 运行 ? 好了,测试通过。 欢迎拍砖。需要demo的可以发私信给我。
对于 IIS,执行应用程序的进程名称是w3wp,对于 IIS Express,它是iisexpress 要获取执行应用程序的进程名称,请使用System.Diagnostics.Process.GetCurrentProcess
观察任务管理器,发现内存占用一下就降下来了,原来是之前的进程直接奔溃了,重启了一个W3WP进程。 既然直接从任务管理器无法创建,就使用第三方工具收集Dump吧。 procdump w3wp -m 20480 -o D:\Dumps (当内存超过20G时抓取一个w3wp进程的MiniDump) 上面就是我踩得第一个坑,因为默认抓取的是MiniDump,很快就抓下来 procdump w3wp -ma -m 20480 -o D:\Dumps (当内存超过20G时抓取一个w3wp进程的完整Dump) 结果再一次,当内存占用到达20G,占比80%的时候,Dump再次创建失败 大致的意思是说,当90S内Dump文件没有成功创建的话(也就意外这w3wp进程被挂起了90s),IIS检测到w3wp进程挂起超过90s没有响应就会终止进程,重现创建一个新的进程。好嘛,真是处处是坑。 procdump w3wp -ma -m 8000 -o D:\Dumps (当内存超过8000M时抓取一个w3wp进程的完整Dump,并输出到D:\Dumps文件夹) 此时内存占用在40%左右,这次Dump
网上搜了一下,好像WeDev服务好像没有64位的,所以要解决这个问题,那么就不要使用这个服务作为Web服务,而使用IIS,因为IIS使用的是w3wp,在64位的操作系统中是64位的,所以可以正常使用64
System.ServiceModel" /> <Correlation ActivityID="{00000000-0000-0000-0f00-0060010000fb}" /> <Execution ProcessName="<em>w3wp</em>
对于IIS,执行应用程序的进程名称是w3wp,对于IIS Express,它是iisexpress 要获取执行应用程序的进程名称,请使用System.Diagnostics.Process.GetCurrentProcess
没有必要去附加什么其他的进程(比如iis 的w3wp)。 3. 支持所有的传输协议。 4. 生命周期可控。通过调用Open() 和 Close()方法可以很方便的控制服务的状态。
的数量会从1逐步增加到所有Worker Process的数目总和,总数是使用中的应用程序池的Maximum Worker Processes的总和,可以用powershell执行get-process w3wp
然后使用dnSpy工具反编译调试,将项目文件拖到dnSpy中,调试-附加到进程(w3wp),打断点进行跟踪。 然而进行了多次调试操作后,因为异常是在某个线程中触发的,并没有跟踪到异常产生的位置。
K3Cloud采⽤ASP.NET开发,由多个Web App组成,安装后可在IIS⻅多个⽹站和虚拟⽬录 使⽤dnSpy对Web程序进⾏调试,需使⽤管理员权限运⾏,根据Poc所测试的应⽤程序附加到对应的w3wp
HostingEnvironment.UnregisterObject保证任务正常退出 对于这个流程上面的Myjob就是FluentScheduler提供的一个示例 IIS预加载 应用程序池回收之后,如果没有人访问网站,w3wp
如iis服务会启动w3wp进程,w3wp进程就会监听80端口或者你设置的某个端口。