Netty,1W socket,100msg/s 广播, 30%cpu,5G 内存。

2015-01-04 18:59:44 +08:00
 yxaaa123

5G内存!这正常吗?!!!用了各种优化方法内存还是嗷嗷涨!怎么办!

4407 次点击
所在节点    Java
13 条回复
otmb
2015-01-04 19:45:53 +08:00
这么耗内存啊
zeeler
2015-01-04 20:12:49 +08:00
很不正常哦,用了什么优化方法?
cpp255
2015-01-04 22:20:45 +08:00
1W就这么大内存了么
jones
2015-01-05 10:02:50 +08:00
yxaaa123
2015-01-05 13:37:16 +08:00
@jones 真是太感谢了
yxaaa123
2015-01-05 14:01:30 +08:00
@otmb 完全不知道该如何解决。
yxaaa123
2015-01-05 14:01:57 +08:00
@zeeler 各种改代码,各种改jvm参数
yxaaa123
2015-01-05 14:02:11 +08:00
@cpp255 就是。。。
jones
2015-01-05 14:24:37 +08:00
@yxaaa123 这个直接做几次heap快照,然后对比分析一下内存中什么对象占据大量内存,什么对象数量增长快速且高举不下挺容易的吧,先定为问题然后在有针对性的排查代码比较好,另外你一个JVM进程5G内存也不合适啊,FULL GC一次得要多长时间啊,建议你把GC日志打开,选择合理的GC策略同时关注每次GC的停顿时间和回收率,还有尽量避免FULL GC,在我印象中好像JVM堆内存超过2G就要考虑JVM多进程集群了,超大堆内存如果不发生FULL GC还好,一旦发生FULL GC光停顿时间就会让人崩溃,搞不好几十秒时间不响应,在对响应时间要求苛刻的场景超大堆内存根本玩不转,CMS也不行,估计G5还有希望搞定,但是目前应该还没人把G5用到生产环境
yxaaa123
2015-01-05 14:42:42 +08:00
@jones 之前一直没有接触过java这种级别的调优,netty也没怎么用过,然后第一次压测直接侧漏了。现在16G内存1W连接的广播内存半分钟就干到30%,估计没等full gc就直接挂了。后来改了代码改了jvm参数有了点儿好转,但是依然分分钟暴毙的状态。。
funky
2015-01-11 00:12:57 +08:00
开Jconsole看看到底是什么原因?
sing1ee
2015-01-13 09:24:47 +08:00
解决了么?后续没了啊
mathgl
2015-02-23 12:23:12 +08:00
@jones 看到过一篇文章 tame java gc 。作者提到在大内存下,cms表现优于g1。作者提到在16g下,一般可以把gc控制在150ms左右。不过他的场合是读多写少。一次写只会更改部分数据。

如果有full gc,尽量控制在非繁忙时发生。

总的来说好像用多个jvm比较靠谱一点。

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

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

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

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

© 2021 V2EX