You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redis故障转移引发部分IIS实例响应缓慢问题排查

问题解答

一、排查Redis故障转移原因

1. 检查Redis Sentinel日志

  • 登录运行Sentinel的CentOS节点,执行docker logs <sentinel-container-id>查看容器内日志,重点关注:
    • 主观下线(SDOWN)、客观下线(ODOWN)的触发时间与触发条件
    • 主节点选举过程的日志细节,是否存在选举超时、节点通信失败等异常
    • 日志中是否记录了节点失联、网络波动、内存超限、CPU负载过高的情况

2. 分析Redis主节点故障前状态

  • 执行docker logs <redis-master-container-id>查看主节点故障前的Redis日志,检查:
    • 是否有OOM(内存不足)导致进程被kill的记录
    • RDB/AOF持久化过程是否引发性能骤降或进程挂起
    • 是否出现maxclients超限导致的连接拒绝日志

3. 验证集群网络与节点资源

  • 在CentOS节点上用ping、traceroute检测Redis节点间的网络连通性,排查是否有丢包、延迟突增问题
  • 通过top、free、iostat查看节点的CPU、内存、磁盘IO数据,确认故障时是否存在资源耗尽情况
  • 检查HAProxy的运行日志,确认健康检查、流量转发是否正常

二、IIS侧排查线程数升高与响应缓慢问题

1. 实时监控关键性能指标

  • 打开Windows性能监视器,添加以下计数器:
    • .NET CLR Threads -> # of Threads:跟踪应用池总线程数变化
    • ASP.NET -> Requests Current:查看活跃请求数量
    • ASP.NET -> Requests Queued:检查请求排队情况
  • 故障转移发生时,观察这些指标是否突增,判断是否因线程池耗尽导致响应变慢

2. 抓取应用线程快照

  • 使用dotnet-dump或Visual Studio诊断工具,在应用响应缓慢时抓取线程快照:
    • 排查是否有大量线程阻塞在Microsoft.Web.Redis.RedisSessionStateProvider相关的调用上
    • 检查是否存在死锁、长时间等待的线程

3. 分析应用与系统日志

  • 查看Web应用的自定义日志,确认故障转移时是否有大量Redis连接超时、重试的记录
  • 打开Windows事件查看器,检查Windows Logs -> Application中是否有.NET运行时、IIS的错误/警告,比如线程池耗尽的提示

4. 验证Redis会话提供器配置

  • 当前使用的Microsoft.Web.Redis.RedisSessionStateProvider版本为4.0.1,需确认该版本是否存在故障转移时的连接泄漏或重试逻辑缺陷
  • 检查web.config中的连接字符串配置:
    <sessionState mode="Custom" customProvider="SessionStateStore" timeout="50">
      <providers>
        <add name="SessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" connectionString="10.40.50.50:26379,10.40.50.51:26379,10.40.50.52:26379,10.40.50.53:26379,ssl=false,password=aPassword,serviceName=master" throwOnError="False" />
      </providers>
    </sessionState>
    
    确认serviceName=master配置是否能让Sentinel正确解析主节点切换,是否存在旧主节点地址缓存的问题

内容的提问来源于stack exchange,提问作者Confounder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:35:17