什么情况,占用内存 2 个 G! springboot 这么耗资源嘛

2020-09-24 02:52:37 +08:00
 selfcreditgiving

写了一个 springboot 的小采集程序,使用了 netty (采集 tcp 协议数据)、jpa (保存数据库)。
占用内存为什么这么高呢,是不是需要优化,删除没用的包什么的。

我其他用 纯 java 实现的 同样功能的采集程序,只占 200M 左右(下图 colloect 开头的,和 route 开头的)。

其他的用 node 实现的就更小了,第二张图,同样的功能 java 和 node 程序内存占用对比。node 只有 30 几 M 。

springboot 和其他 java 程序:

java 程序和 node 程序:

4156 次点击
所在节点    问与答
18 条回复
Cooky
2020-09-24 07:44:16 +08:00
spring 就是这么大!
zachlhb
2020-09-24 07:58:07 +08:00
没错,就是这么骚气
SoulSleep
2020-09-24 08:02:30 +08:00
2 个 G 有点多了吧,如果只是爬虫,100-200M 应该是够了的,加了 jpa 和 netty 的包大概也就多几十 M
所以 300M-500M 足够....

一个是看你是否给 jvm 分的多了...

另外 netty 是不是没释放资源,这个涉及到堆外内存的使用

我理解的是这样,如有不对楼下补充
des
2020-09-24 08:13:17 +08:00
据说是默认会吃掉四分之一的内存,另外 springboot 确实是很吃资源
supermoonie
2020-09-24 08:17:09 +08:00
我用 netty 写了一个抓包工具,用 springboot 保存 req res 数据并负责展示,运行下来也就 700 多 M,你这个怕是内存没管理好吧,内存分析工具分析下,看看占用内存的是哪些对象
des
2020-09-24 08:17:50 +08:00
找到四分之一的说法的来源了
https://stackoverflow.com/questions/38564648
hand515
2020-09-24 08:33:06 +08:00
带上 JVM 参数才好分析
wangyanrui
2020-09-24 08:36:04 +08:00
不限内存大小,默认最大为机器内存的四分之一
手动 gc 一下估计能少不少😂
cheng6563
2020-09-24 08:44:17 +08:00
用-Xmx 限制内存使用
用 g1gc
passerbytiny
2020-09-24 08:46:09 +08:00
JVM 默认占用物理内存的 4/1 至 1/2,可手动调控——这是 Java 人员的基本功。
free9fw
2020-09-24 08:57:42 +08:00
java 本来就是上个世纪的,又老又笨重,打印个值都要写一大串。。。什么时候淘汰它
selfcreditgiving
2020-09-24 09:29:08 +08:00
@des 默认分配那么多内存啊。服务器是 32g 内存的,已经跑了很多 docker 容器了,这个程序是直接跑在宿主机上的。
如果按比例分配是不是要放在容器里就会占用少一点。
selfcreditgiving
2020-09-24 09:38:36 +08:00
@wangyanrui #8
@cheng6563 #9
@passerbytiny #10
可以设置的啊,多谢。现学的 java,不太熟悉
SingeeKing
2020-09-24 10:55:15 +08:00
@selfcreditgiving 没必要专门为了这个放容器,可以直接调 JVM 参数的
blackboom
2020-09-24 10:58:36 +08:00
springboot 吃内存,可以选择 OpenJ9 表现明显。
594duck
2020-09-24 11:21:36 +08:00
@free9fw 奋斗的青年啊,你在搞笑么。号称要淘汰 JAVA 的十几种语言今天能顶的上来的有哪个,别一天天天的瞎想


@selfcreditgiving 什么都用容器解决最后会什么都解决不了。
mazyi
2020-09-24 12:39:24 +08:00
水平差别怪框架
azygote
2020-09-24 16:44:59 +08:00
估计是内存泄露了

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

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

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

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

© 2021 V2EX