康柏仕电脑学院正航ERP软件产品技术分享区Server服务器配置教程 → 解决.Net Runtime Optimization Service占用CPU的问题


  共有615人关注过本帖树形打印复制链接

主题:解决.Net Runtime Optimization Service占用CPU的问题

帅哥哟,离线,有人找我吗?
轻轻风聆
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 家人主人
等级:管理员 帖子:2674 积分:26165 威望:0 精华:14 注册:2005/9/15
解决.Net Runtime Optimization Service占用CPU的问题  发帖心情 Post By:2023/10/27 15:36:10 [只看该作者]

    今天接到云主机的告警,说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种方法在此一并记录下,也许以后用的上。

[此贴子已经被作者于2023/10/27 15:37:56编辑过]


正航--放大你管理的力量!
正航,缔造智慧企业!
正航东莞-松山湖、长安:www.chidg.com
咨询热线:0769-81158210  13580877608
 回到顶部