[ 
https://issues.apache.org/jira/browse/IGNITE-1661?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14954542#comment-14954542
 ] 

wjw465150 commented on IGNITE-1661:
-----------------------------------

test code:
package wjw.test.ignite.benchmark;

import java.util.Arrays;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

import javax.cache.expiry.CreatedExpiryPolicy;
import javax.cache.expiry.Duration;

import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

public class GetBenchMarkMain {
        static final int COUNT = 100; //线程数
        static final int LOOP = 10000; //每个线程循环次数

        String serversURL = "127.0.0.1:47500..47509";
        String cacheName = "default";

        IgniteCache<String, String> cache1;

        class Worker implements Runnable {
                private CyclicBarrier barrier;
                private CountDownLatch doneSignal;
                private int pos;

                Worker(CyclicBarrier barrier, CountDownLatch doneSignal, int 
pos) {
                        this.barrier = barrier;
                        this.doneSignal = doneSignal;
                        this.pos = pos;
                }

                public void run() {
                        String data = "test(测试)Ignite";
                        try {
                                barrier.await();

                                //System.out.println("线程:" + pos + 
",开始调用get()");
                                String msg;
                                for (int i = 1; i <= LOOP; i++) {
                                        msg = cache1.get(pos + ":" + i);
                                        if ((data + ":" + pos + ":" + 
i).equals(msg) == false) {
                                                System.out.println("线程:" + pos 
+ ",get错误:" + msg);
                                        }
                                }
                        } catch (Exception e) {
                                e.printStackTrace();
                        } finally {
                                //System.out.println("线程:" + pos + 
",结束调用get()");
                                doneSignal.countDown();
                        }

                }
        }

        public void doExecute(String[] args) {
                serversURL = args[0];

                IgniteConfiguration cfg = new IgniteConfiguration();
                cfg.setPeerClassLoadingEnabled(false);
                cfg.setClientMode(true);

                TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi();
                {
                        TcpDiscoveryVmIpFinder ipFinder = new 
TcpDiscoveryVmIpFinder();
                        
ipFinder.setAddresses(Arrays.asList(serversURL.split(",")));

                        discoverySpi.setIpFinder(ipFinder);
                        cfg.setDiscoverySpi(discoverySpi);
                }

                Ignite ignite = Ignition.start(cfg);

                IgniteCache<String, String> cacheDefault = 
ignite.cache("default");
                cache1 = cacheDefault.withExpiryPolicy(new 
CreatedExpiryPolicy(new Duration(TimeUnit.MINUTES, 30)));

                CyclicBarrier barrier = new CyclicBarrier(COUNT);
                CountDownLatch doneSignal = new CountDownLatch(COUNT);

                ExecutorService exec = Executors.newFixedThreadPool(COUNT);
                long currentTimeMillis = System.currentTimeMillis();
                for (int i = 0; i < COUNT; i++) {
                        exec.submit(new Worker(barrier, doneSignal, i));
                }

                try {
                        doneSignal.await(); //等待所有的线程完成工作
                } catch (InterruptedException ex) {
                }
                float ticket = System.currentTimeMillis() - currentTimeMillis;
                System.out.println((COUNT * LOOP) + "次用时" + secondToHMS((long) 
(ticket / 1000)));
                System.out.println("平均每次:" + (ticket / (COUNT * LOOP)) + "毫秒");
                System.out.println("平均每秒:" + ((COUNT * LOOP) / (ticket / 
1000.00)) + "次");

                exec.shutdown();
                ignite.close();
        }

        public static String secondToHMS(long ticket) {
                long day1 = ticket / (24 * 3600);
                long hour1 = ticket % (24 * 3600) / 3600;
                long minute1 = ticket % 3600 / 60;
                long second1 = ticket % 60;

                StringBuilder sb = new StringBuilder();
                if (day1 > 0) {
                        sb.append(day1 + "天");
                }
                if (hour1 > 0) {
                        sb.append(hour1 + "小时");
                }
                if (minute1 > 0) {
                        sb.append(minute1 + "分");
                }
                sb.append(second1 + "秒");

                return sb.toString();
        }

        public static void main(String[] args) {
                if (args.length < 1) {
                        System.out
                            .println("用法:java -Xmx512m -cp ./classes:./lib/* 
wjw.test.ignite.benchmark.GetBenchMarkMain 
服务器ip:服务器port1..服务器port2,服务器ip:服务器port1..服务器port2,...");
                        System.out
                            .println("例如:java -Xmx512m -cp ./classes:./lib/* 
wjw.test.ignite.benchmark.GetBenchMarkMain T1:47500..47509,T2:47500..47509");
                        System.exit(0);
                }

                GetBenchMarkMain testGet = new GetBenchMarkMain();
                testGet.doExecute(args);

                System.exit(0);
        }

}

> memory leak
> -----------
>
>                 Key: IGNITE-1661
>                 URL: https://issues.apache.org/jira/browse/IGNITE-1661
>             Project: Ignite
>          Issue Type: Bug
>          Components: cache
>    Affects Versions: ignite-1.4
>         Environment: centos 6.3
>            Reporter: wjw465150
>
> when use withExpiryPolicy cache,and CacheConfiguration.eagerTtl is set true, 
> this will cause heap memory leak!
> code sample:
>               IgniteCache<String, String> cacheDefault = 
> ignite.cache("default");
>               cache1 = cacheDefault.withExpiryPolicy(new 
> CreatedExpiryPolicy(new Duration(TimeUnit.MINUTES, 30)));



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to