美文网首页C#
记一次由Redis导致W3SVC的CPU占用100%的问题

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

作者: 天兵公园 | 来源:发表于2017-10-19 10:31 被阅读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;
            }
        }
    }
    

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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/xffuuxtx.html