[虚心请教] JDK8 默认的配置环境下,10G 的堆内存 Full GC 一次要 16s 左右,该如何优化?处理一个请求内存耗费大约 900M

2019-10-16 12:42:58 +08:00
 summer7
6916 次点击
所在节点    Java
63 条回复
hikikomorimori
2019-10-16 17:51:36 +08:00
考虑 Nosql?
lihongjie0209
2019-10-16 18:03:35 +08:00
@hikikomorimori #21 不管底层存储怎么样, 加载 30000 条数据就需要这么多的内存
babyvox5th
2019-10-16 18:09:27 +08:00
补充一下技术优化之外的,SSD 上 3000MB.
ipwx
2019-10-16 18:11:40 +08:00
不该想办法维护中间结果的表,降低每次请求计算量么
bk201
2019-10-16 18:17:06 +08:00
取少点不行吗?
bobuick
2019-10-16 18:21:56 +08:00
假设你其他措施都做了, 然后单次要是 900m 是必要的数据. 然后也无法重新设计, 然后请求完数据后内存里这些数据就不用保存了的话, 不是应该在 young 区被回收么. 把 young 设的足够大一些. 老年代应该保持一天都不到一次的水平
summer7
2019-10-16 18:36:26 +08:00
@ipwx 嗯,以前 hbase 做存储时已经是结构化的数据了,但是后来换了数据库必须要调用方去解析这些数据。其实整体数据流程很简单,jdbc 查询,查完解析入库。
bookit
2019-10-16 18:39:57 +08:00
用 C 写一遍,最简单的那种,看需要多少内存
sadfQED2
2019-10-16 18:40:58 +08:00
考虑 nosql?另外必须实时吗,不需要实时的话定时脚本计算,然后存缓存呢。最后,如果都不行就升级机器? 80 核以上,500+G 内存那种?
sadfQED2
2019-10-16 18:42:18 +08:00
@sadfQED2 楼上的换语言没什么意义啊,数据已经那么大了,你用什么语言加载到内存都那么大,除非改算法
BBCCBB
2019-10-16 18:45:21 +08:00
先用 G1 试试,然后增大堆内存再试试
l8g
2019-10-16 18:48:15 +08:00
1. 一次查询 3W 条记录,可以拆分一下
2. 调整一下 Young 和 Old
summer7
2019-10-16 18:50:55 +08:00
@bobuick 感谢回复。young 设置大一点我会验证试一下的。这是第一次遇到这种 GC 问题,不知像互联网那些高并发项目,Full GC 频率的合理范围是多少呢?还请指教
summer7
2019-10-16 18:52:09 +08:00
@babyvox5th 数据 JDBC 查询完,就是内存操作了目前。
summer7
2019-10-16 18:55:19 +08:00
@l8g 感谢回复。楼上也有大佬提到修改 young 和 old,我会试一下的。 说起来,拆分查询也是一个头疼的事情,目前底层存储库不支持这种比如 limit 这种拆分查询
summer7
2019-10-16 18:55:46 +08:00
@BBCCBB 感谢回复。G1 会尝试一下的。
summer7
2019-10-16 18:58:51 +08:00
@bobuick 目前我单纯的本地写个 for 循环去触发查询接口,基本上每调用 9 次就会触发一次 Full GC,之后内存迅速下降,基本等于刚启动时候的内存。 改改参数看吧,也是第一次遇到这种问题
summer7
2019-10-16 19:01:05 +08:00
@sadfQED2 感谢回复。数据要求实时查询。加机器配置这个事情,难呀。
summer7
2019-10-16 19:07:20 +08:00
@yidinghe 感谢回复。
1、确认后没有内存泄漏,一次 FullGC 之后内存基本和刚启动时一样.但是一次 10 并发,基本就要 Full GC 一次,楼下也有大佬提出修改 young 和 old,我试一下看看,将 young 设置大一点。
2、对于取一条数据解析一条,嗯。。其实一直有个疑惑,while(resultSet.next ())的时候,这个 resultSet.next 是不是就相当于一个游标,其实数据还是存在于数据库端的?还是说不同数据库有不同的实现方式?
shakoon
2019-10-16 19:08:41 +08:00
如果能在数据库上实现,用视图把表拆小、用存储过程进行你所说的解析,就试一下看看

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

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

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

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

© 2021 V2EX