.NET Core 2进程CPU占用过高问题求助(Mac环境)
关于Mac下
dotnet new angular项目重启后CPU占用100%的问题解决建议 我之前在Mac环境下开发.NET + Angular项目时,也碰到过完全一样的糟心问题!结合自己的排查和社区里的经验,给你几个可行的方向:
先解决眼前的残留进程问题:
每次用control + c退出后,用pkill dotnet命令可以一次性杀掉所有残留的dotnet进程,比手动找PID一个个杀方便多了。如果还是有顽固进程,用ps aux | grep dotnet找到对应的PID,再执行kill -9 <PID>强制终止,之后再重新运行dotnet run应该就能正常启动了。排查根本原因:
- 热重载/文件监听的兼容性问题:Angular模板默认会启用dotnet的热重载功能,而Mac的文件系统事件(比如FSEvents)有时候会和dotnet的watch机制冲突,导致残留进程进入无限循环,疯狂占用CPU。你可以试试运行
dotnet run --no-hot-reload,如果重启后不再出现CPU拉满的情况,那基本就是热重载的锅。 - 进程退出不彻底的联动问题:
dotnet new angular创建的项目是.NET后端和Angular前端一起启动的,control + c可能只终止了前端的dev server,但.NET的后端进程因为某些原因没有被正确终止,或者反过来。这种情况下,残留的进程会因为失去了联动的另一端,陷入异常循环。 - SDK版本bug:某些特定版本的.NET SDK在Mac上确实存在进程残留的问题,建议你更新到最新的稳定版SDK,很多这类小bug都会在后续版本中被修复。
- 热重载/文件监听的兼容性问题:Angular模板默认会启用dotnet的热重载功能,而Mac的文件系统事件(比如FSEvents)有时候会和dotnet的watch机制冲突,导致残留进程进入无限循环,疯狂占用CPU。你可以试试运行
长期规避的小技巧:
可以把杀进程的命令写成一个简单的shell脚本,比如创建一个kill-dotnet.sh,内容就是pkill dotnet,需要的时候执行一下,比每次手动输命令省事。
内容的提问来源于stack exchange,提问作者shanmugharaj
相关产品推荐
相关产品推荐

