C#

记一次由Redis导致W3SVC的CPU占用100%的问题

2017-10-19  本文已影响28人  天兵公园

昨天晚上线上的一台服务器持续CPU占用100%,这台服务器主要跑的是 app 的服务端接口程序。这在上一个版本中未发生,主要是在昨天更新了一个版本,加入 redis 作为缓存后引起的,能直接断定问题也就免得再要各种办法去定位问题了。

Redis 的客户端 sdk 用的是 StackExchange.Redis,这在 nuget 官网有,或者使用 pm 安装。

PM > Install-Package StackExchange.Redis -Version 1.2.6

基本用法参考 : https://stackexchange.github.io/StackExchange.Redis/Basics

在这个项目中发现每使用一次 redis 都会使用类似下面的代码获取一个示例:

ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("server1:6379,server2:6379");

ConnectionMultiplexer 并不需要再程序的每处都创建示例,这会导致 redis server 连接数持续升高而不会被释放。

参考这个博主将其改成单例 : http://www.cnblogs.com/bnbqian/p/4962855.html#connectionmultiplexer

sealed class RedisManager
{
    private static readonly RedisManager instance = new RedisManager();

    public ConnectionMultiplexer Redis { get; private set; }

    static RedisManager()
    {
    }

    private RedisManager()
    {
        if (Redis == null)
        {
            Redis = ConnectionMultiplexer.Connect("localhost");
        }
    }

    public static RedisManager Instance
    {
        get
        {
            return instance;
        }
    }
}

重新发布后,问题得以解决。

上一篇下一篇

猜你喜欢

热点阅读