Rumah > Artikel > pangkalan data > Bagaimana untuk menyelesaikan ralat kebocoran memori yang disebabkan oleh menggunakan salad untuk memulakan redis
Cari tetingkap->preferences->Java->JRE yang dipasang dalam eclispe, klik butang Edit di sebelah kanan dan isikan nilai berikut dalam pilihan "Default VM Arguments" dalam antara muka penyuntingan.LEAK: hashedwheelTimer.release() tidak dipanggil sebelum ia dikumpul oleh sampah. Malah, ia disebabkan oleh ingatan yang tidak mencukupi.
Ia boleh diselesaikan dengan melaraskan memori supaya cukup besar. -Xms64m -Xmx128m
<.>2. Run Apabila menggunakan program java, pilih run->run configuration->arguments dan masukkan -Xms100M -Xmx800M (-Xms mewakili saiz memori yang diperuntukkan apabila jvm bermula, dan -Xmx mewakili jumlah maksimum memori yang boleh diperuntukkan).
Tambahan: Redis connection pool Lettuce pitfall record1 PengenalanBaru-baru ini, kami kerap menggunakan projek dalam persekitaran ujian yang berbeza Masalah Redis dihadapi semasa proses pembinaan dan penempatan. Projek ini berdasarkan SpringBoot2.1.12. Pakej balang bersepadu SpringBoot2.1.X Spring-data-redis-start menggunakan Lettuce sebagai kumpulan sambungan Redis.
SpringBoot2.x, spring-data-redis menggunakan Lettuce sebagai kumpulan sambungan pemacu klien redis secara lalai.
2. Senario perangkap
Nod induk tertentu dalam persekitaran berjalan gugusan Redis tidak stabil dan tidak boleh disambungkan, menyebabkan aplikasi SpringBoot melaporkan ralat semasa menyambung ke Redis dan ralat tamat masa sambungan .
Tulis semula RedisConnectionFactory Bean, berdasarkan Spring-data-redis. Anda perlu menetapkan "Batalkan pengesahan keahlian nod kluster": .validateClusterNodeMembership(false).
spring: 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
2. Kelas konfigurasi Config
@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;
}
}
Nota:
RedisClusterConfiguration getClusterConfiguration() perlu Kata laluan , jika tidak SpringBoot bermula dan melaporkan ralat pengesahan:
"io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication diperlukan"seperti berikut: Selain itu, salad -Versi pakej balang teras tidak boleh terlalu rendah untuk menghalang beberapa item konfigurasi daripada disokong Konfigurasi di atas ialah lettuce-core-5.18.RELEASE.jar.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat kebocoran memori yang disebabkan oleh menggunakan salad untuk memulakan redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!