java多线程调用ktr文件内存溢出java.lang.OutOfMemoryError:GC overhead limit exceeded 20
我用java写的多线程调用kettle的ktr文件,之前是写成bat文件,bat里放ktr文件路径,直接调用bat,是没问题的,后来,我改成在java里直接调用ktr文件...
我用java写的多线程调用kettle的ktr文件,之前是写成bat文件,bat里放ktr文件路径,直接调用bat,是没问题的,
后来,我改成在java里直接调用ktr文件,报java内存溢出 java.lang.OutOfMemoryError:GC overhead limit exceeded
我后台调用ktr代码是这样写的,
public static boolean execute(String filename, String[] params) {
boolean status = true;
try {
System.out.println("进入kettle执行......");
KettleEnvironment.init();// 初始化kettle环境
TransMeta transMeta = new TransMeta(filename);// 转换元对象
Trans trans = new Trans(transMeta);// 转换
// trans.prepareExecution(null);// 异常处理
trans.execute(params);
// 等待转换执行结束
trans.waitUntilFinished();
if (trans.getErrors() > 0) {
status = false;
throw new RuntimeException("kettle运行错误");
}
log.debug("执行kettle结束!..." + filename);
} catch (KettleException e) {
e.printStackTrace();
try {
throw e;
} catch (KettleException e1) {
e1.printStackTrace();
}
} finally {
}
return status;
}
数据量大的时候,10个线程同时跑,就会报
java.lang.OutOfMemoryError:Java heap space
at net sourceforge.jtds.util.BlobBuffer.getBytes()
和java.lang.OutOfMemoryError:GC overhead limit exceeded
at java.nio.ByteBuffer.wrap
报以上两种错误
请有这方面经验的高手指点,不胜感谢! 展开
后来,我改成在java里直接调用ktr文件,报java内存溢出 java.lang.OutOfMemoryError:GC overhead limit exceeded
我后台调用ktr代码是这样写的,
public static boolean execute(String filename, String[] params) {
boolean status = true;
try {
System.out.println("进入kettle执行......");
KettleEnvironment.init();// 初始化kettle环境
TransMeta transMeta = new TransMeta(filename);// 转换元对象
Trans trans = new Trans(transMeta);// 转换
// trans.prepareExecution(null);// 异常处理
trans.execute(params);
// 等待转换执行结束
trans.waitUntilFinished();
if (trans.getErrors() > 0) {
status = false;
throw new RuntimeException("kettle运行错误");
}
log.debug("执行kettle结束!..." + filename);
} catch (KettleException e) {
e.printStackTrace();
try {
throw e;
} catch (KettleException e1) {
e1.printStackTrace();
}
} finally {
}
return status;
}
数据量大的时候,10个线程同时跑,就会报
java.lang.OutOfMemoryError:Java heap space
at net sourceforge.jtds.util.BlobBuffer.getBytes()
和java.lang.OutOfMemoryError:GC overhead limit exceeded
at java.nio.ByteBuffer.wrap
报以上两种错误
请有这方面经验的高手指点,不胜感谢! 展开
1个回答
2014-08-15
展开全部
两种方案:1.把Java虚拟机的内存设大点;2.手动释放内存机制,而不是执行完之后由Java虚拟机统一释放
追问
我java内存和kettle内存都设置到10240m了,还是报这样的错
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询