我正在使用 spring boot来开发客户端应用程序.
当运行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%

在这里,您可以看到退出时所有本机和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启动内存的使用?的更多相关文章

  1. android – map.setmylocationenabled(true)不工作

    我在我的Android应用中使用谷歌地图.我需要将地图重新定位到客户端的当前位置.我使用了以下声明–这会在右上方显示一个按钮,但单击该按钮不起作用.按钮单击侦听器:解决方法只需从myotheranswerhere获取代码,然后修改按钮单击侦听器以请求其他位置:然后onLocationChanged()中的代码将重新定位摄像机位置,然后再次注册位置更新:

  2. 将地图标记设置为自定义颜色Android

    我正在制作一个应用程序,可以在某些点添加地图.我希望我的针脚的颜色与我们的应用程序的主题颜色相匹配.对不起,我真的是个菜鸟.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.color)));不起作用.它不允许我在这里插入自定义颜色.我怎样才能做到这一点?谢谢:)解决方法defaultMarker()方法允许设置自

  3. android – 如何将LatLng实例发送到新意图

    我需要将LatLng类的实例传递给另一个intent.我该怎么办?这是代码.请帮帮我.路线类:这是我的路线课.我不知道这个问题.帮帮我吧它似乎发送捆绑很好,但收到它时出错.解决方法使用putParcelable方法将LatLng对象附加到Bundle:现在将它附加到您的意图:要在新活动中获取它:

  4. android – GoogleMap快照方法返回白色图像

    当它触发时你有一个真正的位图.

  5. 浅析MMAP零拷贝在RocketMQ中的运用

    零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效地提高数据传输效率,这篇文章主要介绍了MMAP零拷贝在RocketMQ中的运用,需要的朋友可以参考下

  6. windows – mmap的可移植性如何?

    我一直在考虑使用mmap进行文件读取,并且想知道它是多么便携.我正在Linux平台上开发,但希望我的程序可以在MacOSX和Windows上运行.我可以假设mmap正在这些平台上运行吗?

  7. centos – 快照期间的错误页面映射错误

    我运行以下命令来创建快照卷.但内核收到了一个错误,kvm管理程序停止响应.为什么错误以及如何解决?

  8. windows – 使用内存映射文件读取大文件

    我看到许多文章建议不要将大文件映射为mmap文件,因此虚拟地址空间不会仅由mmap完成.在地址空间急剧增加的64位进程中,这会如何变化?如果我需要随机访问文件,是否有理由不立即映射整个文件?

  9. 在windows平台上是否有一个内存映射api,就像linux上的mmap()一样?

    有没有api做内存映射,就像在linux上?

  10. 如何在Java中映射(mmap)linux块设备(例如/ dev / sdb)?

    我可以使用java.nio读取/编写带有Java的linux块设备.以下代码有效:但是,内存映射不起作用.以下代码失败:这失败,错误:有没有解决这个问题?我在某个地方读过,可能是通过使用JNI,我可以做到这一点,但我找不到任何来源.解决方法根据documentation,实际映射文件的机制留给实现.似乎实现正在尝试截断文件(可能是因为块设备大小与您指定的大小不同?

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部