我们已经制定了一个零售解决方案,其中会话处理由Spring session处理。我们使用gemfire来维护会话对象,并将客户端用作Spring会话数据gemfire客户端模块。我们最初进行了连接,最终启动并运行。但是当应用程序所在容器的负载增加时,我们面临着应用程序响应方式的严重问题。响应时间增加太多,以至于没有处理任何请求。
我们分析了线程转储,可以看到许多与gemfire客户端相关的线程处于阻塞或等待状态。即使是导致问题的负载,jvm参数、CPU使用情况和堆内存似乎都很好。
我们从线程转储分析中看到以下内容:
线程竞争Servlet-调度程序:渲染阻塞在org.apache.geode.cache.client.internal.ConnectionImpl@3afbbf9
从gemfire客户端日志中观察到以下内容:
4/30/19 12:03:21.559PM[m[30m2019-04-30 12:03:21,559[Cache Client Updater Thread on Xx.XX.XX.XX(XXXXX:62475):1024 port 40404]信息:冗余订阅endpointXXXXX:40404崩溃。调度恢复。第一个黑名单日志发生为:4/30/19 12:03:21.631PM[m[34m2019-04-30 12:03:21,630[queueTimer-DEFAULT]WARN:Cache Client Updater Thread on XX.XX.XX.XX(XXXXX:76221):1024 port 40404(XXXXX:40404):在尝试创建服务器到客户端通信套接字时捕获以下异常并将退出:org.apache.Geode.cache.client.ServerRefuedConnectionException::40404拒绝连接:java.lang.Exception:此客户端被服务器列入黑名单
黑名单后,该应用程序实例在所有means.it将无法处理任何请求。
在此黑名单方面,任何帮助都非常感谢。
黑名单或拒绝名单的新术语意味着客户对事件的反应迟缓。
您可以在文档中阅读更多关于如何管理和防止慢接收器的信息:https://gemfire.docs.pivotal.io/98/geode/managing/monitor_tune/slow_receivers.html
这些文档的主要收获是确保客户端有足够的资源,并且不会缺乏CPU周期、网络、磁盘或RAM。
如果客户端在虚拟化环境中运行,请从vshpere的角度查看运行客户端VM的窃取时间或就绪时间。如果客户端在容器中运行,请确保它没有因为超过配额而被限制。
拒绝名单代码:https://github.com/apache/geode/search?q=denylist