我正在尝试使用apache geode复制一个非常大的值。我基本上是在用redis的setbit函数。当我不断增加setbit函数的偏移量时,geode服务器崩溃。我使用的是地理的redis适配器作为客户端。

import redis.clients.jedis.*;
import redis.clients.jedis.exceptions.JedisException;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.exceptions.JedisException;

public class Test {

    //address of your redis server
    private static final String redisHost = "10.0.0.10";
    private static final Integer redisPort = 11211;

    //remember to increase sensder queue size
    public void addSets() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(50);
        poolConfig.setMaxTotal(1000);
        poolConfig.setTestOnBorrow(true);
        poolConfig.setTestOnReturn(true);
        JedisPool pool = new JedisPool(poolConfig,redisHost, redisPort,10000000);
        Jedis jedis= null;
        String key = "shivd";
        long [] bits = {1464236631,12373513,1488983657,1329373495,147236649,1623846793,1194510359,282099785,1758709929,1059647223,416962921,1893573065,924784087,551826057,2028436201};

        //get a jedis connection jedis connection pool
        try {
            jedis = pool.getResource();
            Pipeline pipeline = jedis.pipelined();

            for (long b : bits) {

                pipeline.setbit(key, b, true);
            }
            pipeline.multi();
            pipeline.exec();

        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }
        pool.destroy();

    }
    public static void main(String[] args){
        Test main = new Test();
        main.addSets();
        //main.cal();
        //main.addHash();
    }
}

如果我把偏移量减小到某个极限,它就起作用了。
下面是使用redis适配器的两个缓存服务器的日志:
log(10.0.0.10)-我在其中插入密钥
dc1.log
log(复制发生的地方)
dc2.log

最佳答案

你的geode服务器内存不足。最后一个值是2028436201,它需要大约253MB才能存储在内存中。
您可以为geode服务器提供更多内存,例如:

gfsh>start server --name=serv1 --max-heap=2G

如果偏移量那么大,也可以尝试将位集的基值设置为最小偏移量。(即在存储前从每个偏移量中减去最小偏移量,然后在外部保持最小偏移量)。

10-05 23:24