1
hrong 2016-06-01 07:56:42 +08:00 via Android
性能优化了吗?开个 profile 监测一下呗
或者用第三方服务,名字我就不说了,省得有广告嫌疑 |
4
ncisoft OP @hrong 代码写得再好、内存利用得再好, JAVA 系统能逃得过 full GC 和 stop-the-world ?
|
5
fcicq 2016-06-01 08:25:43 +08:00
没钱就慢慢折腾吧. 有钱上 Azul
|
6
wwqgtxx 2016-06-01 08:37:54 +08:00 via Android
貌似找不到什么现成的答案,自己用 java8 执行一遍试试吧
|
7
NullMan 2016-06-01 08:44:08 +08:00
性能优化是能写 800 页的知识, 一句话是很难说清楚. 我觉得呢, 还是看书获取相关知识比较好.
|
8
wangxn 2016-06-01 08:50:50 +08:00 via Android
Azul Zing
|
10
ncisoft OP @wangxn Azul 确实挺神的,我在 08 年还听说过一个更神的方案,美国人做的, 384 cores 512G RAM , GC 0 延时,用的硬件方案配合
|
11
weiweiwitch 2016-06-01 09:07:47 +08:00
感觉楼上的答案都没有说到点子上。现在 Java 不管是 CMS 还是 G1 ,停顿延迟都已经很低了。如果遇到 stop-the-world 的停顿,甚至达到了几分钟。那么绝对是因为内存泄漏导致可用内存不足,从而触发 full Gc 。
这种情况一个是看看 Xmx 是否设小了,另外就是好好查查代码中是否有内存泄漏。 开发环境下做个压力测试。然后 Java 内带的 jvisualvm 可以看基本的内存增长。如果内存慢慢涨到 Xmx 的极限值,那么就是有内存泄漏。如果真有内存泄漏,仔细检查代码,另外到网上下载个 jprofiler ,然后耐心的开始找哪里泄漏了。 |
12
coolcfan 2016-06-01 09:10:50 +08:00
性能优化里面很重要的一点就包括让代码在运行的时候“产生更少的垃圾”和“产生垃圾的速度可预测”吧。
|
13
ncisoft OP @weiweiwitch 请教你在实际生产环境中用到多大的堆, full GC 一半是多长时间?
|
14
weiweiwitch 2016-06-01 09:17:11 +08:00
我们负载最终的服务的 Xmx 是 30G 内存, 24 核的 CPU 。由于是 tcp 长连接的,并且要求是毫秒级的响应,是不允许出现 full Gc 的。
|
15
ncisoft OP @weiweiwitch 这么历害,数值亮瞎眼了哦,用的哪个 jdk 和什么垃圾回收器呢
|
16
weiweiwitch 2016-06-01 09:26:25 +08:00
@ncisoft 大部分情况下 Oracle 的 JDK 已经可以满足需求了。 6G 内存以下用 CMS 回收, 6G 内存以上并且 CPU 强劲用 G1 回收。
最重要的是不要出现内存泄漏,另外是在确保代码可读性的基础上减少不必要的对象的创建。 |
17
ncisoft OP @weiweiwitch 你的意思是 azul 快要关门了?
|
18
weiweiwitch 2016-06-01 09:40:49 +08:00
@ncisoft 我的意思是绝大部分需求是不需要那么高的实时性,更多时候是需要更大的吞吐量。所以 Oracle 的 JDK 对于大部分人来说已经够用了。
|
19
mathgl 2016-06-01 09:50:57 +08:00
@ncisoft azul zing 据他们员工介绍可以在 2TB ram 维持 10ms 以下的停顿。 不过我想一般的应用也没太大机会用到 2TB Ram
|
20
xAx 2016-06-01 09:58:07 +08:00
三大商用 jvm 都无法避免 stop-the-world
如果想尽可能降价 full gc 的影响,那么不要一个 server 分几十 g 内存, 而是采用 32 位 jvm ,每个 server 分 2 至 4g 内存,建立 server 集群的方式。 这是 jvm 性能优化的一种常用方案。主要解决 full gc 时扫描的内存区块大小和避免 64 位 jvm 内存对齐的性能损耗。 看个七八百页书后对 jvm 优化应该就能入门 |
21
beneo 2016-06-01 10:00:40 +08:00
gc log 查一下, dump heap 看一下
|
22
ncisoft OP @xAx 以前我是直接看 sun 官网上的 hotspot 文档,关于各种垃圾回收器的实现机制和相关参数,书还真没看过
|
23
ncisoft OP 看来大家的主要意见还是集中在代码编写和 JVM 优化上, LinkedIn 在 JVM 优化上做了不少的工作,分享出来的相关资料也不少,可供参考
|
24
ncisoft OP 讲到 GC ,我见过最好的内存模型还是 Erlang 的,一个 coroutine 有私有堆和私有堆栈, coroutine 之间不共享数据,受语言模型限制, JAVA 肯定没法比, golang 也是
|
26
swolf119 2016-06-01 10:32:32 +08:00
堆并不是越大越好,反而越大看 gc 一次时间越久
小堆的 web 应用主要还是 CMS ,大堆可以艹 G1 |
27
zhenjiachen 2016-06-01 10:33:32 +08:00
@xudd linkedin 是一个公司。
|
28
xudd 2016-06-01 10:44:47 +08:00
@zhenjiachen 哦,我查了一下是一个职场社交平台(领英)吗?我还以为是一个人呢,嘿嘿
|
30
wander2008 2016-06-02 07:24:59 +08:00 via iPhone
full gc 还能到几分钟,你们到底啥业务啊?
|
31
iminto 2016-06-27 14:40:52 +08:00
ull gc 还能到几分钟,你们的程序员可以开除了
|