#🎜🎜 #Speicherleck. Tatsächlich wird es durch unzureichenden Speicher verursacht. Suchen Sie das Fenster->Einstellungen->Java->Installierte JRE in Eclipse, klicken Sie rechts auf die Schaltfläche Bearbeiten und geben Sie die folgenden Werte in die „Standard-VM-Argumente“ ein. Option in der Bearbeitungsoberfläche Das ist es.LEAK: hashedwheelTimer.release() wurde nicht aufgerufen, bevor es in den Garbage Collection aufgenommen wurde. Aktivieren Sie das erweiterte Leck
-Xms64m -Xmx128m
2. Fallstrickszenario
Laufumgebung Ein bestimmter Masterknoten im Redis-Cluster ist instabil und kann nicht verbunden werden, was dazu führt, dass die SpringBoot-Anwendung beim Herstellen einer Verbindung zu Redis einen Fehler meldet. und ein Verbindungs-Timeout-Fehler. 3. LösungSchreiben Sie die RedisConnectionFactory-Bean basierend auf Spring-data-redis neu. Sie müssen „Überprüfung der Clusterknotenmitgliedschaft abbrechen“ festlegen: .validateClusterNodeMembership(false). 1. Redis-Konfigurationspring: redis: cluster: nodes: - ${redis.host.cluster} #redis集群ip-port password: ${redis.password} timeout: 5000 #连接超时时间 lettuce: pool: max-active: 10 #连接池最大连接数 max-wait: -1 #连接池最大阻塞时间 max-idle: 5 #连接池中最大空闲连接 min-idle: 1 #连接池中最小空闲连接 redis: cluster: enabled: true
@Data
@Component
@ConditionalOnProperty(name = "redis.cluster.enabled", havingValue = "true", matchIfMissing = false)
public class RedisConfig {
@Autowired
RedisProperties redisProperties;
// 在构建LettuceConnectionFactory时,如果不使用内置的destroyMethod,可能会导致Redis连接早于其它Bean被销毁
@Bean(destroyMethod = "destroy")
public RedisConnectionFactory newLettuceConnectionFactory() {
// 配置用于开启自适应刷新和定时刷新。如自适应刷新不开启,Redis集群变更时将会导致连接异常
ClusterTopologyRefreshOptions clusterTopologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
.enablePeriodicRefresh(Duration.ofSeconds(60))// 开启周期刷新(默认60秒)
.enableAdaptiveRefreshTriggers(RefreshTrigger.ASK_REDIRECT,RefreshTrigger.UNKNOWN_NODE)// 开启自适应刷新
.build();
ClusterClientOptions clusterClientOptions = ClusterClientOptions.builder()
.topologyRefreshOptions(clusterTopologyRefreshOptions)//拓扑刷新
.disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS)
.autoReconnect(true)
.socketOptions(SocketOptions.builder().keepAlive(true).build())
.validateClusterNodeMembership(false)// 取消校验集群节点的成员关系
.build();
LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
.clientOptions(clusterClientOptions)
.readFrom(ReadFrom.SLAVE_PREFERRED)
.build();
return new LettuceConnectionFactory(getClusterConfiguration(), clientConfig);
}
private RedisClusterConfiguration getClusterConfiguration() {
RedisProperties.Cluster clusterProperties = redisProperties.getCluster();
RedisClusterConfiguration config = new RedisClusterConfiguration(clusterProperties.getNodes());
if (clusterProperties.getMaxRedirects() != null) {
config.setMaxRedirects(clusterProperties.getMaxRedirects());
}
if (redisProperties.getPassword() != null) {
config.setPassword(RedisPassword.of(redisProperties.getPassword()));
}
return config;
}
}
Hinweis:
Das obige ist der detaillierte Inhalt vonSo beheben Sie den Speicherverlustfehler, der durch die Verwendung von Salat zum Starten von Redis verursacht wird. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!