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

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

内容简介: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%》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

设计方法卡牌

设计方法卡牌

罗莎 等 / 电子工业出版社 / 2017-7 / 79.00

本套设计素材提供了54种设计方法,以卡牌的形式展示给读者,每张卡牌包括该设计方法的基本描述、目的、时间成本、工具渠道、使用阶段、操作步骤及其归类属性等信息。在做设计时,可以根据自己的需求进行卡牌的选择和组合,让设计工作更有灵活性和趣味性。同时,依据设计产品属性的不同,卡牌提供了选择设计方法的推荐模板、方法组合模板、产品阶段划分模板,给初学者在做设计时提供一定的理论依据,帮助读者启发设计灵感,剖析设......一起来看看 《设计方法卡牌》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码