解决.Net Runtime Optimization Service占用CPU的问题
今天接到云主机的告警,说CPU占用率长期在100%,服务器是windows2012的系统,登录后看有个.Net Runtime Optimization Service的进程把CPU全占了,之前没见过这个进程,经查询了解这是触发了.NET的最佳化服务,这个最佳化服务在安装完.NET之后还会继续预编译那些高优先级的assemblies,然后等到系统空闲的时候再去处理那些低优先级的assemblies,处理完了会自动结束,但是这程序什么时候开始处理什么时候处理结束就不可知了,后查询了解到有几种方法解决这个问题。
1、用脚本加快优化服务。
新建个文本文件将下面的脚本复制进去,将文件重命名为netruntime.ps1。文件名随便取,扩展名要改为.ps1。保存之后在文件上点击鼠标右键,选择 【使用 PowerShell 运行】,等程序执行完成后.Net Runtime Optimization Service就没有了,CPU占和率也恢复到了正常水平。脚本执行时间会有点长,我2C4G的云主机运行大概跑了2个小时。
# Script to force the .NET Framework optimizATIon service to run at maximum speed. $iswin8Plus = [Environment]::OSVersion.Version -ge (new-object 'Version' 6,2) $dotnetDir = [environment]::GetEnvironmentVariable("windir","Machine") + "\Microsoft.NET\Framework" $dotnet2 = "v2.0.50727" $dotnet4 = "v4.0.30319" $dotnetVersion = if (Test-Path ($dotnetDir + "\" + $dotnet4 + "\ngen.exe")) {$dotnet4} else {$dotnet2} $ngen32 = $dotnetDir + "\" + $dotnetVersion +"\ngen.exe" $ngen64 = $dotnetDir + "64\" + $dotnetVersion +"\ngen.exe" $ngenArgs = " executeQueuedItems" $is64Bit = Test-Path $ngen64 #32-bit NGEN -- appropriate for 32-bit and 64-bit machines Write-Host("Requesting 32-bit NGEN") Start-Process -wait $ngen32 -ArgumentList $ngenArgs #64-bit NGEN -- appropriate for 64-bit machines if ($is64Bit) { Write-Host("Requesting 64-bit NGEN") Start-Process -wait $ngen64 -ArgumentList $ngenArgs } #AutoNGEN for Windows 8+ machines if ($iswin8Plus) { Write-Host("Requesting 32-bit AutoNGEN -- Windows 8+") schTasks /run /Tn "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319" } #64-bit AutoNGEN for Windows 8+ machines if ($isWin8Plus -and $is64Bit) { Write-Host("Requesting 64-bit AutoNGEN -- Windows 8+") schTasks /run /Tn "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64" }
2、通过命令行关闭mscorsvw.exe
打开cmd窗口(管理员身份运行),在命令提示符中键入:ngen.exe executequeueditems
3、禁用 Microsoft .NET Framework NGEN 服务
1、用快捷键win+R打开运行框,在运行框中输入services.msc 后回车打开服务窗口,找到Microsoft .NET Framework NGEN服务项,双击进入属性窗口,在打开的属性窗口中,单击“停止”按钮,并将启动类型设置为“禁用”,单击确定即可。
我是用第一种方法把问题解决的,2、3种方法在此一并记录下,也许以后用的上。