请教一个问题,你们启动 Java -Xms -Xmx 是如何设定的

2021-08-17 22:49:29 +08:00
 0576coder

4 核 8G 我那边启动参数-Xms -Xmx 都是 4G

应用是 spring boot 没有使用操作堆外内存的情况

这样导致一个问题就是应用的内存其实不会随着请求增加 导致内存上升,感觉这样是不是有点浪费内存

本人 java 新手,不懂 jvm 我看别人复制粘贴的 jvm 优化就是初始分配跟最大分配的堆内存设置一样,这真的有效果么

2478 次点击
所在节点    Java
12 条回复
ikas
2021-08-18 00:37:58 +08:00
-Xmx 配置为可以处理自己业务的最大内存...然后-Xms 与其一样..没什么浪费之说..那个内存反正闲着也是闲着
0576coder
2021-08-18 00:44:09 +08:00
@ikas
比如你内存 8G 你总不能-Xms -Xmx 都是 4G 的话 那么系统内存就是一直在 40% 上下
ikas
2021-08-18 01:00:54 +08:00
@0576coder 内存就是给你这个应用跑的...除非你这个服务器要跑多个应用?就算是多个那也要根据最大内存考虑...
所以就算占用 40%也没事啊........配置一样就是为了减少 gc 操作...这个内存不存在什么浪费之说
sagaxu
2021-08-18 07:44:52 +08:00
Xmx 太小,导致频繁 GC,增加延迟
Xmx 太大,full gc 停顿太久,抖动明显
cheng6563
2021-08-18 09:55:50 +08:00
jvm 一个很大诟病就是难以把已 gc 的内存还给操作系统。
你如果把 Xmx 设置成 4G,就算实际你程序只会用 1g 也会因为内存碎片等各种各样的原因给你占到 4G 去,并且一直占着不回收。
在 Java12 之后的版本加-XX:-ShrinkHeapInSteps 参数可以更激进地归还内存,但效果一般。
换 openj9 效果较好,但 openj9 的 1.0 正式版不知道何年何月发布。
Oktfolio
2021-08-18 10:25:05 +08:00
4 核 8G 默认给的这么多 -Xms4g -Xmx4g -Xmn2g
0576coder
2021-08-18 10:25:43 +08:00
@cheng6563
很好奇你们是如何设置的
0576coder
2021-08-18 10:26:03 +08:00
@sagaxu
可以请教下你们线上是如何设置的吗
sagaxu
2021-08-18 10:41:24 +08:00
@0576coder 内部管理后台 1G,标准服务 2G,高流量或逻辑复杂服务 4G
chendy
2021-08-18 16:01:02 +08:00
Xms Xmx 设置一样的,外加一个 XX:+AlwaysPreTouch,内存给够让它好好干活就完事了
0576coder
2021-08-18 16:45:18 +08:00
@chendy
XX:+AlwaysPreTouch 这个参数加了后 你们项目启动会变慢多少
tanweiiiii
2022-01-02 16:39:10 +08:00
我们用的 k8s 默认是 pod 的 limit 内存的 75%

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

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

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

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

© 2021 V2EX