ASP.NET Core奇遇记:无用户访问,CPU却一直100%

栏目: ASP.NET · 发布时间: 7年前

内容简介:ASP.NET Core奇遇记:无用户访问,CPU却一直100%

这是5月11日遇到的一个问题,1台1核1G阿里云 Linux 服务器运行着生产环境中的ASP.NET Core站点,出现CPU 100%问题。

ASP.NET Core奇遇记:无用户访问,CPU却一直100%

开始以为是这台服务器负载高引起的,于是将这台服务器从负载均衡上摘下来。这时奇怪的事情发生了,即使没有负载(无用户访问),CPU也在接近100%范围波动。

用htop命令查看,也没看到哪个进程占用CPU特别多。

ASP.NET Core奇遇记:无用户访问,CPU却一直100%

以为是阿里云服务器的问题,向阿里云提交了工单,阿里云客服分析后发现其中的一个进程(我们的一个ASP.NET Core站点)占用资源比较多,而且对资源的占用频繁变动。

看来问题与这个ASP.NET Core站点有关,这时发现另外一个奇怪的地方——虽然监控显示CPU占用一直接近100%,但这台服务器上的其他ASP.NET Core站点都能正常运行(有正常的负载),不像以前遇到的各种CPU 100%情况。

于是查看这个ASP.NET Core站点的日志,发现下面的error log:

---> System.Net.Sockets.SocketException: No such host is known
   at System.Net.Dns.HostResolutionEndHelper(IAsyncResult asyncResult)
   at System.Net.Dns.EndGetHostAddresses(IAsyncResult asyncResult)
   at System.Net.Dns.<>c.<GetHostAddressesAsync>b__14_1(IAsyncResult asyncResult)

查看了对应的代码(在Startup.cs的ConfigureServices中):

services.AddDistributedServiceStackRedisCache(options =>
{
    configuration.GetSection("redis").Bind(options);
    //Workaround for deadlock when resolving host name
    if (!IPAddress.TryParse(options.Host, out var ip))
    {
        options.Host = Dns.GetHostAddressesAsync(options.Host)
        .Result.FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork).ToString();
    }
});

联想到出问题之前用 supervisorctl restart 命令重启了站点,以及我们最近更换了阿里云 redis 实例,终于明白了引发CPU 100%问题的原因。

这个 ASP.NET Core 站点的 appsettings.json 中配置的 redis 实例已经释放,上面的代码中通过 redis 实例的网址解析 IP 地址的操作会失败,由于这个操作是在 Startup 中进行的,所以造成整个站点启动失败。本来仅仅是站点启动失败并不会造成CPU 100%,但是由于我们在 supervisor 中(我们是用 supervisor 以服务方式运行 ASP.NET Core 站点的)配置了 autorestart=true 。于是,当 DNS 解析失败造成的 ASP.NET Core 站点启动失败后,supervisor 会自动重启站点,重启依然失败,失败后继续重启。。。就这样不停地重启,造成了 CPU 100% 。当在 appsettings.json 中修改为正确的 redis 配置后,问题立马解决。


以上所述就是小编给大家介绍的《ASP.NET Core奇遇记:无用户访问,CPU却一直100%》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Linux集群体系结构

Linux集群体系结构

Alex Vrenios / 马朝晖 / 机械工业出版社 / 2003-1 / 38.00元

本书对Linux集群体系结构的硬件环境组建与其软件开发作了深入细致的介绍。通过阅读本书,可以对Linux集群体系结构有深入的认识,掌握并了解如何设计和构造集群计算机。本书使你了解到开发项目可能遇到的问题,并掌握测试和调整分布式算法。 本书适合计算机系统集成技术人员、管理人员和计算机科研人员作为参考。一起来看看 《Linux集群体系结构》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具