IOCP大并发svchost.exe(NlaSvc服务)占满CPU问题分析

症状:

使用IOCP开发的SSLSpider(SSL证书扫描服务)运行一会后(4000并发),系统的一个svchost.exe一直满一个CPU内核(共4核)。


分析:

此进程运行了4个服务:

停止WinRM、Dnscache都没用,停止NlaSvc超时了,应该是这货在作怪,Google。。。

真的是它!

别人遇到的,貌似没找到解决方法

http://www.tomshardware.com/forum/302313-28-usage-minutes-turned-urgent

暂时先停掉这个服务吧(并设置为手动启动),Network List Service 这个依赖它的服务也会停掉了。


2014年7月2日 问题找到了!

是打开过资源监视器,或者类似的工具(Process Explorer), 他们会使用NlaSvc服务(我已经设置为“手动”,但是还被启动了),“禁用”服务后问题不再出现。

此问题还出现在云监控等有大并发场合。具体可以观察CPU使用时间,来发现是否有占用CPU过多的进程。

说明

NlaSvc(Network Location Awareness ):收集和存储网络的配置信息,并在此信息被修改时向程序发出通知。如果停止此服务,则配置信息可能不可用;如果禁用此服务,则显式依赖此服务的所有服务都将无法启动。

 

依赖它的服务:netprofm(Network List Service)

识别计算机已连接的网络,收集和存储这些网络的属性,并在更改这些属性时通知应用程序。