昨天晚上线上的一台服务器持续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;
}
}
}
重新发布后,问题得以解决。
网友评论