Infinispan复制缓存双节点跨机部署性能骤降求助
问题分析与优化建议
你的核心问题是Infinispan复制缓存跨机双节点部署后TPS从3000暴跌至1000,结合提供的JGroups配置,以下是针对性的优化方向:
1. 启用消息 Bundling(最关键优化)
当前JGroups TCP配置中bundler_type="no-bundler"会导致每个缓存操作都发送独立的TCP数据包,跨机场景下网络延迟的叠加会严重拉低性能。建议替换为固定大小的bundler,合并小消息以减少网络往返:
<TCP bind_addr="${jgroups.bind_addr:192.168.206.117}" bind_port="${jgroups.bind_port:9092}" external_addr="${jgroups.external_addr}" external_port="${jgroups.external_port}" thread_pool.min_threads="0" thread_pool.max_threads="200" thread_pool.keep_alive_time="30000" use_virtual_threads="true" buffered_input_stream_size="8192" buffered_output_stream_size="8192" thread_pool.enabled="true" bundler_type="fixed-size" bundler.capacity="64000" bundler.max_size="64000"/>
2. 修复线程池配置
当前thread_pool.enabled="false"会导致消息处理线程资源受限,即使开启了虚拟线程,也需要启用线程池来调度复制消息的处理。将thread_pool.enabled改为true,确保有足够的线程处理跨节点的复制请求。
3. 调整TCPPING与节点加入行为
send_cache_on_join="true"会在节点加入时发送整个缓存数据,若缓存数据量大,会占用大量网络带宽,影响运行时性能。建议修改为:
依赖<TCPPING async_discovery="true" initial_hosts="${jgroups.tcpping.initial_hosts:192.168.206.117[9092],172.16.93.21[9093]}" return_entire_cache="${jgroups.tcpping.return_entire_cache:true}" send_cache_on_join="false" port_range="${jgroups.tcp.port_range:2}"/>pbcast.STATE_TRANSFER同步节点缓存数据,可额外调整其chunk_size参数,分批传输数据以降低单次带宽占用。
4. 优化Infinispan复制模式
若当前使用同步复制(SYNC),每个写操作都需要等待所有节点确认,跨机网络延迟会直接导致TPS下降。可选择:
- 切换为异步复制(ASYNC):在Infinispan缓存配置中设置
<replication mode="ASYNC"/>,以弱一致性为代价换取大幅性能提升; - 若必须保留同步复制,调整复制超时时间(如
repl_timeout="500"),避免过长等待阻塞请求。
5. 网络与流量控制优化
- 检查两台机器间的网络延迟(ping)和带宽(用iperf3测试),确保局域网内延迟低于1ms、带宽至少1Gbps;
- 调整UFC/MFC的
max_credits参数,从2M提升至4M或8M,避免流量控制导致的消息阻塞:<UFC max_credits="4M" min_threshold="0.4"/> <MFC max_credits="4M" min_threshold="0.4"/>
6. 应用层批量操作优化
将应用中单个的put/remove操作改为批量操作(如putAll/removeAll),让Infinispan批量复制消息,减少跨节点的网络交互次数,直接提升TPS。
内容的提问来源于stack exchange,提问作者maryam maleki
相关产品推荐
相关产品推荐

