You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "wjw465150 (JIRA)" <ji...@apache.org> on 2015/10/13 09:28:05 UTC
[jira] [Commented] (IGNITE-1661) memory leak
[ 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)