百万级数据ITeye - AG环亚娱乐

百万级数据ITeye

2019-01-10 17:12:24 | 作者: 忆香 | 标签: 时刻,所用,搜集 | 浏览: 914

JVM学习笔记:
堆内存设置原理:
JVM 之 GC日志剖析 :
JVM client形式和Server形式的差异:
废物搜集器:
VisualVM剖析器:
MemoryAnalyzer运用:
MAT中Retained和Shallow差异:
运用场景:先需要将Mdb中的表中数据,全量搬迁到Sdb中,一种办法用东西Kettle,第二种编写脚本,第三种程序搬迁,榜首与第二种搬迁对大表没有问题,第三种,因为百万级数据表,全量从Mdb取出,再全量刺进的Sdb,对内存的要求较高,比较有用的办法是分页查询,再刺进;今日咱们不讲的分页查询刺进,来看全量从Mdb取出,再分批量刺进的Sdb,关于分页分批刺进(为应对内存问题,能够将查询成果存到文件,再从文件中读取刺进),后续再讲。
首要代码:
int counts =0;//记载数
//Data d = null;
while (rs.next()) {
 Data d = new Data();
 d = getData(rs);
 insertList.add(d);
 pd = null;//待gc收回
 if(counts%5000==0){
 batchSave(insert, insertList);
 insertList.clear();
 log.info("============RecordsSave:"+counts);
 if(rs.isLast()){
 batchSave(insert, insertList);
 insertList.clear();
 log.info("============Records:"+counts);
 counts++;
}

下面的测验表记载数为28万
Tomcat:JavaOPT 默许
-client
-Xmx256M
JVM虚拟机默许启动时,client形式,废物形式为Serial New + Serial Old
当counts%10000==0,批量为10000,抛出OOM:java heap space
当Data d = new Data();放在循环外界说:Data d = null;抛出OOM:java heap space
当批量为5000时:
JConsole 堆信息:
2016-09-29 16:40:42
已运用: 107,876 Kb
分配: 253,440 Kb
最大值: 253,440 Kb
GC 时刻: 
Copy(326 项搜集)所用的时刻为        2.518 秒
MarkSweepCompact(171 项搜集)所用的时刻为       1 minute
所用时刻s:220.66
VisualVM:



Viusal GC:



去除log.info("============Records:"+counts);
JConsole 堆信息:
时刻: 2016-09-29 16:25:44
已运用: 244,748 Kb
分配: 253,440 Kb
最大值: 253,440 Kb
GC 时刻:
Copy(332 项搜集)所用的时刻为  2.456 秒
MarkSweepCompact(114 项搜集)所用的时刻为 39.902 秒
所用时刻s:163.09
这阐明,不要打,不必要的log
VisualVM:





Viusal GC:



当批量为2000时:
JConsole 堆信息:
2000
时刻: 2016-09-29 16:50:28
已运用: 252,652 Kb
分配: 253,440 Kb
最大值: 253,440 Kb
GC 时刻:
Copy(321 项搜集)所用的时刻为        2.369 秒
MarkSweepCompact(106 项搜集)所用的时刻为       36.438 秒
所用时刻s:145.524

VisualVM:




Viusal GC:





比照5000能够看出,堆内存的趋势图,更陡峭,Copy及MarkSweepCompact搜集次数削减,故所用时刻下降。

当批量为1000时:
JConsole 堆信息:
时刻: 2016-09-29 17:03:10
已运用: 249,215 Kb
分配: 253,440 Kb
最大值:253,440 Kb
GC 时刻: 
Copy(330 项搜集)所用的时刻为        2.299 秒
MarkSweepCompact(100 项搜集)所用的时刻为       34.530 秒
所用时刻s:159.459
从所用时刻和Copy及来看,比2000批次还有,MarkSweepCompact搜集次数削减了6次
从5000,2000,1000来看阐明,批次处理量对处理的速度有影响,应挑选适宜的批次数量。

下面调整一下
JavaOPT
-server
-XX:+PrintGCDetails
-Xloggc:E:\gc.log
Server形式下,废物收回器默许为PS Scavenge+ PS-Old
我的机器内存是8G,默许Server形式下,Xmx1024M ,相同的处理逻辑:
当批量为2000时:
JConsole 堆信息:
时刻: 2016-09-29 17:12:41
已运用: 337,969 Kb
分配:  574,784 Kb
最大值:  932,096 Kb
GC 时刻: 
PS MarkSweep(6 项搜集)所用的时刻为        1.475 秒
PS Scavenge(74 项搜集)所用的时刻为        1.090 秒
全量更新所用时刻s:114.25

当批量为5000时:
时刻: 2016-09-29 17:19:26
已运用: 365,969 Kb
分配: 547,968 Kb
最大值: 932,096 Kb
GC 时刻: 
PS MarkSweep(6 项搜集)所用的时刻为        1.400 秒
PS Scavenge(70 项搜集)所用的时刻为        1.212 秒
所用时刻s:107.12
从上能够看出新生代的搜集次数削减,所用时刻削减,这阐明当堆内存增大时,能够相应的调整批量处理数,以进步处理功率。


咱们来看看在-server,形式下能处理的最大记载数:
java OPTS:
-server
-Xms512M
-Xmx1024M
-XX:NewSize=384M
-XX:ParallelGCThreads=4
-XX:+PrintGCDetails
-Xloggc:E:\gc.log
时刻: 2016-09-29 18:16:19
已运用: 1,004,657 Kb
分配: 1,028,288 Kb
最大值:  1,028,288 Kb
GC 时刻:
PS MarkSweep(424 项搜集)所用的时刻为     10 minutes
PS Scavenge(121 项搜集)所用的时刻为        3.631 秒
在上述装备下,能够处理的最大记载数为1040000
总结:
从上的剖析来看,批量处理的数量,应该依据堆内存的改变而调整,已达到立项的处理功率;
在1G的堆内存,处理百万级以下的数据量,仍是能够滴。
分页分批次处理:
java opts:
-server
-Xms1024M
-Xmx1536M
-XX:NewSize=512M
-XX:ParallelGCThreads=4
首要逻辑:
 sql = "SELECT COUNT(*) FROM " + test;
 ps = con.prepareStatement(sql);
 countResultSet = ps.executeQuery();
 int sums =0;
 while(countResultSet.next()){
 sums =countResultSet.getInt(1);
 int batches = 0;
 if( sums 100000){
 if(sums % 100000 ==0){
 batches = sums/100000;
 else{
 batches = sums/100000 + 1;
 int counts =0;//记载数
 for(int i =1;i =batches;i++){
 logger.info("==============第"+i+"页start==========");
 counts+=InsertRecordByPages((i-1)*100000+1,(i)*100000);
 logger.info("==============已更新记载数:"+counts);
 logger.info("==============第"+i+"页end==========");
 }

在InsertRecordByPages函数中,不必的局部变量要null化
成果:能够处理140万的数据
==============第15页start==========
2016-09-30 16:16:10 -885050 ==============已更新记载数:1409864
2016-09-30 16:16:10 -885050 ==============第15页end==========
再大,只能用东西搬迁了。











版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章