gpt4 book ai didi

java - 如何减少Spring Boot内存使用?

转载 作者:行者123 更新时间:2023-12-01 17:48:08 25 4
gpt4 key购买 nike

我正在使用 Spring Boot 来开发客户端应用程序。当运行Spring Boot应用程序(使用完全可执行的jar)时,内存使用量在x64服务器中约为190M,在x86服务器中约为110M。

我的 JVM 选项是(-Xmx64M -Xms64M -XX:MaxPermSize=64M -server),为什么x64服务器内存占用这么大?如何将内存使用量减少到150M以下?

谢谢。

最佳答案

这里有点晚了,但我在 Docker 上的容器化 Spring Boot 应用程序中遇到了同样的问题。在最简单的带有单个 Controller 和嵌入式 Tomcat 的 Spring Boot 应用程序上,您所能获得的最低总内存约为 72M 左右。加上 Spring Data REST、Spring Security 和一些 JPA 实体,您将看到最少 200M-300M。通过使用以下 JVM 选项,您可以获得一个总大小约为 72M 的简单 Spring Boot 应用程序。

使用 -XX:+UseSerialGC 这将与分配堆内存的线程(而不是专用 GC 线程)内联执行垃圾收集

使用 -Xss512k 这会将每个线程堆栈内存限制为 512KB,而不是默认的 1MB

使用 -XX:MaxRAM=72m 这会将 JVM 对堆和非堆托管内存的计算限制在该值的范围内。

除了上述 JVM 选项之外,您还可以在 application.properties 文件中使用以下属性:

server.tomcat.max-threads = 1 这会将 HTTP 请求处理程序线程的数量限制为 1(默认为 200)

<小时/>

这是一个docker stats示例,它运行一个非常简单的Spring Boot应用程序,具有上述限制和docker -m 72m参数。如果我将值减小到低于此值,我将无法启动应用程序。

83ccc9b2156d:内存使用情况:70.36MiB/72MiB |内存百分比:97.72%

在这里您可以看到退出时所有 native 和 Java 堆内存的分割。

Native Memory Tracking:

Total: reserved=1398681KB, committed=112996KB
- Java Heap (reserved=36864KB, committed=36260KB)
(mmap: reserved=36864KB, committed=36260KB)

- Class (reserved=1086709KB, committed=43381KB)
(classes #7548)
( instance classes #7049, array classes #499)
(malloc=1269KB #19354)
(mmap: reserved=1085440KB, committed=42112KB)
( Metadata: )
( reserved=36864KB, committed=36864KB)
( used=36161KB)
( free=703KB)
( waste=0KB =0.00%)
( Class space:)
( reserved=1048576KB, committed=5248KB)
( used=4801KB)
( free=447KB)
( waste=0KB =0.00%)

- Thread (reserved=9319KB, committed=938KB)
(thread #14)
(stack: reserved=9253KB, committed=872KB)
(malloc=50KB #74)
(arena=16KB #26)

- Code (reserved=248678KB, committed=15310KB)
(malloc=990KB #4592)
(mmap: reserved=247688KB, committed=14320KB)

- GC (reserved=400KB, committed=396KB)
(malloc=272KB #874)
(mmap: reserved=128KB, committed=124KB)

- Compiler (reserved=276KB, committed=276KB)
(malloc=17KB #409)
(arena=260KB #6)

- Internal (reserved=660KB, committed=660KB)
(malloc=620KB #1880)
(mmap: reserved=40KB, committed=40KB)

- Symbol (reserved=11174KB, committed=11174KB)
(malloc=8417KB #88784)
(arena=2757KB #1)

- Native Memory Tracking (reserved=1858KB, committed=1858KB)
(malloc=6KB #80)
(tracking overhead=1852KB)

- Arena Chunk (reserved=2583KB, committed=2583KB)
(malloc=2583KB)

- Logging (reserved=4KB, committed=4KB)
(malloc=4KB #179)

- Arguments (reserved=17KB, committed=17KB)
(malloc=17KB #470)

- Module (reserved=137KB, committed=137KB)
(malloc=137KB #1616)

也不要指望从中获得任何像样的性能,因为我想象 GC 会在这种设置下频繁运行,因为它没有大量空闲内存可供使用

关于java - 如何减少Spring Boot内存使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60831890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com