StackExchange.Redis를 사용할 때 시간 초과 문제가 있습니다. 내가 stackoverflow에서 찾을 수있는 모든 것을 시도했다. 난 단지 queue
및 qs
변화 얻을 거의 모든 예외에 Timeout performing GET XXX, inst: 4, mgr: ProcessReadQueue, err: never, queue: 9, qu: 0, qs: 9, qc: 0, wr: 0, wq: 0, in: 65536, ar: 1, IOCP: (Busy=0,Free=1000,Min=400,Max=1000), WORKER: (Busy=35,Free=32732,Min=400,Max=32767)
StackExchange.Redis timeouts GET
하고 11
최대 값을했다 : 여기
내가 얻고 것입니다.
나는 너겟 버전 1.0.488
을 사용하고 있습니다. 응용 프로그램은 Windows Server 2012의 IIS 8.5에서 호스팅됩니다.이 컴퓨터에는 32GB의 RAM이 있으며 30-50 %에서 사용됩니다. maxmemory
을 16gb
으로 설정하고 maxheap
을 22GB로 설정했습니다. 디스크에 저장이 비활성화되었습니다. 세션 저장 장치로만 사용하고 있습니다.
Redis 서버 (버전 x64-2.8.2402)가 동일한 컴퓨터에 설치되어 있습니다. 여기에 내가 가지고있는 redis-cli info에 대한 URL이 있습니다. 내 연결 문자열 <add key="LocalRedis" value="127.0.0.1:6379,connectTimeout=25000,allowAdmin=true,password=xxx" />
을 찾는 방법
System.TimeoutException: Timeout performing GET Airports, inst: 1, mgr: ProcessReadQueue, err: never, queue: 4, qu: 0, qs: 4, qc: 0, wr: 0, wq: 0, in: 65536, ar: 1, IOCP: (Busy=0,Free=1000,Min=400,Max=1000), WORKER: (Busy=20,Free=32747,Min=400,Max=32767), clientName: OWNEROR-G875DJG at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\ConnectionMultiplexer.cs:line 1927 at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisBase.cs:line 80 at StackExchange.Redis.RedisDatabase.StringGet(RedisKey key, CommandFlags flags) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisDatabase.cs:line 1451 at Resvoyage.Services.RedisCacheProvider.GetValue[T](String key) in c:\Development\thomalex\resvoyage\Resvoyage.Services\RedisCacheProvider.cs:line 88
이는 다음과 같습니다
은 또한이 내가 점점 오전 예외의 일부입니다. 은 ConnectionTimeout은 15000
이었고, 나는 또한 IIS에 대한 machine.config
에 minIoThread
을 증가 25000
에 incresing했습니다. 다음은 내가 배치 한 값입니다. <processModel autoConfig="true" minIoThreads="50" minWorkerThreads="50" maxWorkerThreads = "100" maxIoThreads = "100"/>
slowlog는 내가 느린 일부 SETEX가 있음을 보여주었습니다. 그것이 시간 초과를 직접 일으키는 지 확실하지 않습니다. 저장할 때 최대 7MB의 데이터가 있습니다. 여기에 내가 얻은 예가 있습니다 : 1) (정수) 3852 2) (정수) 1478858333 3) (정수) 19014 – zoranpro
7MB BLOB 쓰기는 단일 스레드를 차단하는 과중한 작업입니다. 어떤 방법으로 크기를 줄일 수 있습니까? – edlerd
아니요. 제 3 자 서비스에서 반환 된 데이터를 저장하고 있으며 그 크기가 다를 수 있습니다. – zoranpro