Java ,大量对象内存中计算, oom 怎么处理哇。

2022-03-20 19:48:24 +08:00
 frank1256

rt ,

遇到个问题,需要查询 100 条记录查到内存中,然后进行计算。我内存很小,总是 oom 。就是单纯的内存不够。有啥好办法吗?

mat 工具打开 dump ,里面全是 mysql 的 jdbc 对象。。。

最高峰 300w 条,也没啥精力再去弄大数据啥的了。老板只给了 8g 。

小弟能想到的就是,分批查询,一批一批计算。靠谱吗?

有什么好办法吗,大佬们

5917 次点击
所在节点    Java
57 条回复
soulzz
2022-03-20 19:49:47 +08:00
加机器 swap 慢就慢
不会崩
frank1256
2022-03-20 19:56:58 +08:00
@soulzz 加机器?我要读到内存里计算哇?加机器有什么用
cabing
2022-03-20 20:18:46 +08:00
@frank1256 为啥要把所有的数据都加载到内存中计算?

300w 行。。

找个基于磁盘的 nosql ?
heyjei
2022-03-20 20:21:17 +08:00
用存储过程把计算推到数据库实现,不要用 Java 计算。
jetyang
2022-03-20 21:09:52 +08:00
分批计算当然靠谱
RedBeanIce
2022-03-20 21:10:49 +08:00
关键词,代码中的大事务问题
CEBBCAT
2022-03-20 21:18:22 +08:00
@frank1256 他少说了个“的”字,“加机器的 swap”

另外,8G 也不算小了吧,我觉得甚至还挺大,一次一百条,平均下来一条数据能拥有 80M 内存。我想问问你,你说的内存里全是 JDBC 是什么意思?我离开 Java 好久了,JDBC 不是连接数据库的吗?你没用连接池吗?或者没有对连接池做单例吗?

你可以讲讲你处理数据的方式吗?我怀疑是不是你程序写得有问题
hidemyself
2022-03-20 21:19:09 +08:00
ResultSet.TYPE_FORWARD_ONLY
ResultSet.CONCUR_READ_ONLY

流式查询 /游标查询 不知道满不满足你的要求
miao1007
2022-03-20 21:21:06 +08:00
写一个 flink 的 jar,单独部署
janus77
2022-03-20 21:35:26 +08:00
分批就分批呗,慢点来就行了,老板问你就说我电脑太差了没办法
sagaxu
2022-03-20 21:39:49 +08:00
100 条跟 300w 也不搭啊
DonaldY
2022-03-20 22:21:53 +08:00
1.先计算一次加载容量,100 条 大对象,大概多大。
2.看 GC 算法,一般调大 老年代的容量,计算出 GC ( STW )的时间
3. 任务进队列,每次执行 x 个任务。
frank1256
2022-03-20 22:37:56 +08:00
@cabing 单纯的统计业务
frank1256
2022-03-20 22:39:44 +08:00
@CEBBCAT 目前就是直接读了数据库,然后一口气查了 100 多万条,然后做计算。要是有几个线程一起查,就 oom 了
frank1256
2022-03-20 22:40:07 +08:00
@hidemyself 这个我没试过,我来看看
frank1256
2022-03-20 22:41:38 +08:00
@sagaxu sor ,漏了个 w ,人傻了
liprais
2022-03-20 22:42:45 +08:00
写个 sql 算完事
misaka19000
2022-03-20 22:45:24 +08:00
信息太少了,不好判断

拆分计算是个办法
CEBBCAT
2022-03-20 23:09:34 +08:00
@frank1256 一百万就是 1M ,8G/1M=8k 。可以跟我分享一下你是怎么计算负载的吗?
Junzhou
2022-03-20 23:11:02 +08:00
100w 条数据之间有强关联性吗? 如果不是,就分批吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/841680

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX