2019独角兽企业重金招聘Python工程师标准>>>

最近准备把一千九百多万数据导入Solr中,在以前测试数据只有一两百万,全量导入没有任务问题。但是,换成一千九百万数据时,solr报内存异常(java.lang.OutOfMemoryError:GC overhead limit exceeded),整个tomcat无法使用。我发现,我给tomcat最大堆内存512M。我觉得,可能是内存过小,于是,我把内存改大些,1024M(set JAVA_OPTS=-server -Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256M )。结果,还是内存溢出。我想已经不是tomcat内存的问题(当然,如果你的内存足够大,也是可行的)。问题,应该出在solr的dataimporthandler取数据那块。solr除了内存溢出错误,还有其他异常:

Full Import failed:java.lang.RuntimeException: java.lang.RuntimeException: org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query: select * from POI Processing Document # 1

at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:278)

at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:411)

at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:483)

at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:464)

Caused by: java.lang.RuntimeException: org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query: select * from POI Processing Document # 1

at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:418)

at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:331)

at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:239)

... 3 more

Caused by: org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query: select * from POI Processing Document # 1

at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:71)

at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:281)

at org.apache.solr.handler.dataimport.JdbcDataSource.getData(JdbcDataSource.java:238)

at org.apache.solr.handler.dataimport.JdbcDataSource.getData(JdbcDataSource.java:42)

at org.apache.solr.handler.dataimport.SqlEntityProcessor.initQuery(SqlEntityProcessor.java:59)

at org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:73)

at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:243)

at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:477)

at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:416)

... 5 more

Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 395,021 milliseconds ago.  The last packet sent successfully to the server was 395,021 milliseconds ago.

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:526)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)

at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)

at com.mysql.jdbc.MysqlIO.nextRowFast(MysqlIO.java:1653)

at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1409)

at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2883)

at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:476)

at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2576)

at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1757)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2167)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2637)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2566)

at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:782)

at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:625)

at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:274)

... 12 more

Caused by: java.io.EOFException: Can not read response from server. Expected to read 39 bytes, read 30 bytes before connection was unexpectedly lost.

at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2497)

at com.mysql.jdbc.MysqlIO.nextRowFast(MysqlIO.java:1634)

... 23 more

  我搜索了一下Solr的wiki,了解到solr jdbc取数据时,setBatchSize的问题。默认,会把很多数据放到内存中,这也是导致我的内存居高不下,后来导致内存溢出的原因。于是,我修改dataimporthandler配置文件:batchSize="-1" 解决内存溢出

  配置文件修改如下:

      <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/world" user="root"password="root" batchSize="-1" />

  重启一个solr的core,重新导入,问题解决。

转载于:https://my.oschina.net/u/734885/blog/602075

Solr Dataimporthandler 导入MySQL 内存溢出。相关推荐

  1. mysql导入 内存溢出_Solr Dataimporthandler 导入MySQL 内存溢出。

    最近准备把一千九百多万数据导入Solr中,在以前测试数据只有一两百万,全量导入没有任务问题.但是,换成一千九百万数据时,solr报内存异常(java.lang.OutOfMemoryError:GC ...

  2. 数据库周刊54丨2020 年度报告:PingCAP、腾讯云数据库、人大金仓、GoldenDB ;CPU 100% SQL优化案例;Mysql内存溢出处理;避免删库跑路黑天鹅……

    热门资讯 [1.PingCAP 2020 年度报告|相信开放的力量 [摘要]本文为PingCAP 2020年度报告.盘点了PingCAP里程碑大事件:完成D轮2.7亿美元融资,创造全球数据库历史新的里 ...

  3. mysql导入 内存溢出_导入数据库内存溢出

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  4. php mysql 内存溢出_关于MySQL的整型数据的内存溢出问题的应对方法_MySQL

    今天接到一个朋友电话说是觉的数据库被别人更改了,出现数据不对的问题 .经过很久的排查是数据类型溢出了(发生问题的版本是MySQL 5.1).后来通过给朋友那边把MySQL 5.1升级到MySQL 5. ...

  5. xampp mysql 内存溢出_php - SQLSTATE [HY000] [2002]连接被拒绝 - 堆栈内存溢出

    我通过将主机更改为localhost尝试了其他解决方案,但仍然没有帮助. 我正在尝试使用php artisan migrate连接MySQL,但出现以下异常: : SQLSTATE[HY000] [2 ...

  6. mysql 内存溢出_mysql - MySQL在非常大的表上计算性能 - 堆栈内存溢出

    我在Innodb中有一个表格,其中有超过1亿行. 我必须知道外键= 1时是否有超过5000行.我不需要确切的数字. 我做了一些测试: => 16 seconds => 16秒中 => ...

  7. solr mysql 导入命令_(solr系列:四)将mysql数据库中的数据导入到solr中及删除solr中导入的数据...

    在前面的博文中,已完成了在tomcat中对solr的部署,为solr添加了一个自定义的core,并且引入了ik分词器. 那么该如何将本地的mysql的数据导入到solr中呢? 准备工作: 1.mysq ...

  8. solr两种安装、ik分词器设置、DIH导入mysql数据

    文章目录 solr 安装(内置方式) solr 安装(tomcat方式) IK中文分词器设置 solr数据操作 使用dataimport导入数据库数据 solr 安装(内置方式) 安装包 官网下载安装 ...

  9. Windows下Solr的安装与配置,附DIH全量导入MySQL数据、IK分词器配置详解——不用集成Tomcat

    Solr是Apache开源的比较稳定的一款全文搜索引擎,也是市面上相对比较流行的一款全文搜索引擎,好不好用你用过之后自有判断.今天给大家分享一下它的安装与配置,我用的是7.7.2版本.废话不多说,开搞 ...

  10. jdbc查询大数据,上亿数据 不会内存溢出(参考solr源码封装)

    目标 最近公司要求做一个web版ETL工具,需要一次性查询出来任意一张表的所有的数据,有一张表到达了1亿两千万,所有经过探索采用了以下的方案 先说一下内存溢出的原因 jdbc查询mysql时,默认会一 ...

最新文章

  1. News Break!沈向洋投资并出任美国版“今日头条”董事长
  2. cnn卷积神经网络_卷积神经网络(CNN)原理及应用
  3. 疯子的算法总结12--倍增
  4. c# 衍生类和基类的构造顺序
  5. 系统架构的演变 -----自 罗文浩
  6. 论文笔记(Neural Collaborative Filtering)
  7. html + css + js 实现简易计算器
  8. c语言设计底层,【学习小总结】C语言的底层开发
  9. inx函数python_Python数据分析入门
  10. java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
  11. SAP 物料成本核算冻结:料号. 不能过账,是否取消?消息 CK167
  12. 使用 miniprogram-ci 进行小程序代码的上传、预览等操作
  13. log4j 日志输出级别区别
  14. linux卷影复制功能,vssadmin 卷影复制服务管理命令行工具
  15. marxico马克飞象
  16. wpsa4排版_如何用WPS快速排版
  17. 英语计算机演讲,计算机英语小演讲 原创
  18. 主引导记录MBR的结构和作用
  19. 企业文化在企业管理中的作用
  20. 实现canvas圆形橡皮檫像素清空功能

热门文章

  1. java 8 特点_Java8的特性有哪些
  2. 动态规划: 数字三角形
  3. python中的字典操作_python中的字典以及相关操作
  4. 在access中一列称为_ACCESS考试_笔试
  5. python3 ValueError: The shape of the input to Flatten is not fully defined (got (0, 6, 80)
  6. 通过minicom传送文件的相关配置及使用方法
  7. DVWA中学习PHP常见漏洞及修复方法
  8. 北京长途汽车站一览表
  9. JavaScript实现map
  10. 手把手教你逆向分析 Android 程序