我正在使用
spring boot来开发客户端应用程序.
当运行spring boot应用程序(使用完全可执行的jar)时,x64服务器中的内存使用率约为190M,x86服务器中的内存使用率约为110M.
当运行spring boot应用程序(使用完全可执行的jar)时,x64服务器中的内存使用率约为190M,x86服务器中的内存使用率约为110M.
我的jvm选项是(-Xmx64M -Xms64M -XX:MaxPermSize = 64M -server),
为什么在x64服务器中,内存使用量如此之大?
如何减少150M以下的内存使用量?
谢谢.
解决方法
这里游戏的后期不多,但我在Docker上遇到了容器化的
Spring Boot应用程序.在最简单的Spring Boot应用程序中,使用单个控制器和嵌入式Tomcat,您将获得的最小内存大约为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 = 5这会将HTTP请求处理程序线程数限制为1(默认值为50)
下面是一个docker stats的例子,它运行一个非常简单的Spring Boot应用程序,具有上述限制和docker -m 72m参数.如果我将值降低到低于此值,则无法启动应用程序.
83ccc9b2156d:内存使用:70.36MiB / 72MiB |记忆百分比:97.72%
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会经常运行这个设置,因为它没有很多备用内存可供使用