中易网

java多线程调用ktr文件内存溢出java.lang.OutOfMemoryError:GC overhead limit exceeded

答案:2  悬赏:50  
解决时间 2021-02-28 20:16
我用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

报以上两种错误

请有这方面经验的高手指点,不胜感谢!
最佳答案
两种方案:1.把Java虚拟机的内存设大点;2.手动释放内存机制,而不是执行完之后由Java虚拟机统一释放
全部回答
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
自制了一个视频,是把动漫的歌和电视剧结合在
茗香源在什么地方啊,我要过去处理事情
战舰少女rU47改双技能效果分析 选哪个好
捐给消防支队的款是不是公益性捐赠
为什么前戏的时候女人下体会流出白色液体
木堂地址有知道的么?有点事想过去
头发扎眼睛有什么危害
绷带奇缘怎么样
台湾话喝酒怎么说
红伯爵国际影城(新玛特购物中心店)地址有知道
工业的UV变压器和UV电容后到时UV灯是多少V电
爱情的感觉究竟是什么样的?
我把手机屏幕一关,它就像一面镜子,感觉自己
西塘假日会所在什么地方啊,我要过去处理事情
老幸旅馆地址在什么地方,想过去办事
推荐资讯
一个男的老是想把话题带点黄上面啥意思啊!
延边富德客场时间表
听到好听的笛声用什么词语形容,
轴承材料一般有哪些?
景山学校小学部好吗?入学有什么条件吗?
填单位名称:一个文具盒的底面积约是2.84()
公国是什么意思?
海水的水蒸气可以喝吗?
三十里堡净水厂2015什么时候建设
我是厨师开饭店的被车撞了怎么赔偿
OMI(南国西汇城市广场店)在什么地方啊,我要
4399申诉是要都对才可以找回吗
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?