关于使用java代码进行数据抽取的问题

最近因为工作需要 要做这样一个工作,要从一个数据库把里面4张表数据导入另外一个库中 来做报表分析,因为原来的生产环境使用人数比较多为了不影响使用才使用到处部分表的方式来做。
因为这几张表又很多数据就考虑了用java来做定时任务每天抽取前一天产生的数据。这样就需要一开始就把那边的数据全部导入到这边数据。
因为数据量比较大再配置数据源的时候使用了c3p0数据源

maximum-connection-count=2000
maximumActiveTime=80000000 这个数据比较重要
simultaneous-build-throttle=150
minimum-connection-count=10

maximumActiveTime=80000000 为什么这里要设置那么大呢 因为在第一次抽取数据的时候数据量很大,一开始因为时间设置短在抽取到三分之一的时候就会出现连接关闭的错误。所以这里可以根据数据情况设置大小
还有一个问题是在抽取的时候因为一次要把数据库里面的数据全部抽取到内存里面 所以机器的内存要大,不够容易产生内存溢出的错误,接下来就要调整jvm的大小了,因为要把数据一次性读入到内存中如果不设置大的话就容易溢出。这里我使用了tomcat来启动我的应用 所以就要设置tomcat的jvm大小

-XmsXXXXm -XmxXXXXm

这里需要使用到64位的JDK因为要设置大的话32位JDK设置超过2G就会无法启动tomcat,所以应该选择64位JDK。
再抽取过程中还出现了 java.lang.OutOfMemoryError:GC overhead limit exceeded 异常 查询得知
DK6新增错误类型。当GC为释放很小空间占用大量时间时抛出。
一般是因为堆太小。导致异常的原因:没有足够的内存。
解决方法
1、查看系统是否有使用大内存的代码或死循环。
2、可以添加JVM的启动参数来限制使用内存:-XX:-UseGCOverheadLimit

[color=orange]该文章主要是记录平时开发中所遇到的问题,望见谅写的比较粗糙,后期慢慢修改[/color]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值