程序遇到性能瓶颈,想在GC上做优化。

jason_66 发布于 2018/01/16 04:18
阅读 932
收藏 0

如题,站点平均在线人数20万人左右,每天入库数据大约在几千万条,现在遇到性能瓶颈,持续了半个月的CPU,TCP连接数 瞬间暴涨,导致JBOSS线程死掉,只能重启线程解决。用了TCP连接池,作用不大,现在想在GC方面进行调优,在google上找了大把资料,奈何小弟基础薄弱,只收集到如下信息:
FULL GC 时间太长,每次FULL GC 之后 下一次都会越来越长,目前可达50秒以上。
EC 每FULL GC 一次 空间都会减少很多。
现在我的想法就是,增大EC的空间大小,减少FULL GC 的执行时间,设置阈值提高FULL GC 次数。
目前小弟也不知道这样有没有明显效果,请oschina各位同僚,大神帮小弟提提意见,在此谢过。
GC优化真是场持久战啊。

加载中
0
meluo
meluo

先确定是不是GC瓶颈,看内存有没有泄露,看代码有没有CPU 密集型计算,下面简单给你说下策略吧

按照难易程度给个list 吧

策略一关键字,‘多’  搞个负载均衡,把单个jboss改成 多个jboss,同时设置jboss 合理内存空间。合理的垃圾回收策略,具体的不好说,这个要看内存快照分析,建议看看 JVM 方面的书籍

策略二关键字,‘拆’ 如果策略一没有办法满足你的需要,那只有拆啦,比如将文件 IO 逻辑拆出来,独立部署,设置合理的策略

策略三关键字,‘钱’ 如果上面还是没有解决问题,那么最后只有放大招啦,没有钱解决不了的问题,增加服务器吧,一台不够买两台,三台。钱是原罪,也是万能

jason_66
jason_66
你好,非常赞同您说的观点,现在这边也正在实施类似你说的三点。
0
-飞客-
-飞客-

如果没有内存泄露的话, 那么基本的思路应该就是化整为零, 就是把一次FULL GC化为多次小GC,  -XX:OldSize=32m  把老年代设置为32m, 这样应该会频繁触发小GC, 但每次GC会非常快. 不知道效果如何.

还有一个思路是多个JVM进程轮换, 类似于微服务的思路, 一次FULL GC需要50秒的话, 那么启动一个新的JVM是不是更划算? 不是很大的系统, 启动一个新JVM应该能在10秒以内吧. 但是这个涉及到session及事务,得看系统架构了.

-飞客-
-飞客-
回复 @jason_66 : 频繁GC,在体验上就是性能下降喽,比如客户端反应更慢了,单次处理所需的时间更长了,得需要试验下, 看看效果是不是要比一次FULL GC 50秒强的多。
jason_66
jason_66
“还有一个思路是多个JVM进程轮换, 类似于微服务的思路, 一次FULL GC需要50秒的话, 那么启动一个新的JVM是不是更划算?” -好的,谢谢,我研究一下这个
jason_66
jason_66
“-XX:OldSize=32m 把老年代设置为32m, 这样应该会频繁触发小GC, 但每次GC会非常快. ” 这样应该是会频繁触发GC,但是因为我对这块并不了解,所以不清楚GC频繁会引发什么后果,麻烦兄弟提点一下,谢谢
jason_66
jason_66
"那么启动一个新的JVM是不是更划算?" 兄弟你的意思是指分流吗?
0
魔力猫
魔力猫

JDK版本多少,建议迁移到最新的JDK,可以考虑选择G1收集器。另外要仔细检查是否有内存泄露。

魔力猫
魔力猫
回复 @jason_66 : 问题还是在GC。FULLGC时间太长,整个JVM停机,前端堵死。建议还是从内存入手。MAT分析有看到最多的对象吗?
jason_66
jason_66
兄弟,我们现在用的是1.6 内存泄漏是存在的,之前发现过内存溢出,还在找原因,但是经过观察,CPU暴涨跟内存溢出的关系不大。
0
卖萌的提莫

绝对多数情况是不需要调的,加内存就能解决

jason_66
jason_66
内存加过2次,感觉就好像无底洞,所以想在GC或者程序上面做文章。
0
薯粉1Q84
薯粉1Q84

站点平均在线人数20万人左右,每天入库数据大约在几千万条 

这么牛逼的站点 还优化个屁gc啊 加机器,你更应该考虑的是数据库怎么做优化 

j
jungggle
回复 @jason_66 : 你的老年代和新生代有多大?
霖vv
霖vv
加台机器吧
jason_66
jason_66
回复 @Joyzhou : 是的,而且很多,并且很大
Joyzhou
Joyzhou
回复 @jason_66 : Map?内存缓存?
jason_66
jason_66
谢谢兄弟,但是说实话现在我方数据库的吞吐量已经能够满足现在的业务需求,单线程5000条数据大概1秒多一点,现在我们系统的缓存都是用的Map,现在我想的是用专门的缓存机制来替代map,优化GC,看看能不能提高一下性能
下一页
0
kakai
kakai

不错!

0
猪大宝
猪大宝

代码中有没有一次请求等待时间比较长的?不懂回收这块的

jason_66
jason_66
有的,基本现在http client 的超时时间都写在2分钟以上。
0
乌龟壳
乌龟壳

上云+分布式改造

jason_66
jason_66
现在是打算做分布式了,拆出一部分功能
返回顶部
顶部