jdbc分页加载完MySQL(3000多条数据),逐条数据处理并写入新表时内存溢出

tsang1990 2017-06-20 11:14:42
最近在搞分词,从网上抓取数据(差不多4000条数据)后存入MySQL,利用多线程单纯分页查询并写入到另一张新表没什么问题,但同样方法往新表写入数据前对内存中的数据(用ArrayList存放)进行分词操作时,内存快速消耗,最终只处理完2000多条就crash(此时jvm进程大小为1.5g),试过设置useFetchSize及连接采用useCursorFetch,但问题一直存在!!本机物理内存12g,jvm运行设置1.5g的内存,求大神如何处理数据才不会oom???
...全文
166 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2017-06-20
  • 打赏
  • 举报
回复
不要共用数据库连接
tsang1990 2017-06-20
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
应该是你的分词算法有问题
我采用的时中科院的ictcla的demo,并单独封装,刚试了另一个分词算法没有问题,看来确实是分词算法本身的问题,另外想请教一下,我多线程往MySQL写入数据,cpu利用率不高,本机i3双核四线程,通常跑25%以下,怎么回事
qq_35243821 2017-06-20
  • 打赏
  • 举报
回复
insert select
xuzuning 2017-06-20
  • 打赏
  • 举报
回复
应该是你的分词算法有问题
tsang1990 2017-06-20
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
瓶颈应在 MySQL 连接。MySQL 有连接数限制,jdbc ;连接池也有连接限制 但线程间共用连接的话,瓶颈就在程序了(等待其他线程的数据库操作结束)
刚查了一下资料,我的程序有几个方法加了synchronized同步,应该时多线程阻塞造成的效率低,多谢版主解答!
xuzuning 2017-06-20
  • 打赏
  • 举报
回复
瓶颈应在 MySQL 连接。MySQL 有连接数限制,jdbc ;连接池也有连接限制 但线程间共用连接的话,瓶颈就在程序了(等待其他线程的数据库操作结束)
tsang1990 2017-06-20
  • 打赏
  • 举报
回复
引用 4 楼 xuzuning 的回复:
不要共用数据库连接
每个线程单独与数据库建立联系??我设置单页容量1000条,一张表下来线程差不多20个,多了MySQL直接就拒接连接 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections" at sun.reflect.GeneratedConstructorAccessor11.newInstance(Unknown Source) 我一直使用的方法是,采用单例模式,开启一个连接,多条线程共用连接预处理后写入,用此方法CPU利用率一直比较低

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧