首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring boot,JVM参数太多还是刚刚好?

Spring boot,JVM参数太多还是刚刚好?
EN

Stack Overflow用户
提问于 2018-11-14 17:03:32
回答 1查看 410关注 0票数 1

我正在尝试为spring boot微服务调优生产JVM,现在我列出了这个列表

代码语言:javascript
复制
-XX:+UnlockExperimentalVMOptions 
-XX:+UseCGroupMemoryLimitForHeap 
-XX:MaxRAMFraction=2
-XX:+UseStringDeduplication 
-XX:+PrintStringDeduplicationStatistics 
-XX:+CrashOnOutOfMemoryError 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:+UseG1GC 
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-Xloggc:/tmp/gc.log 
-XX:+UseGCLogFileRotation 
-XX:NumberOfGCLogFiles=5 
-XX:GCLogFileSize=2000k 
-XX:HeapDumpPath='/var/log/heap_dump.log' 
-XX:+UseGCOverheadLimit
-XX:NativeMemoryTracking=summary
-XX:+UnlockDiagnosticVMOptions 
-XX:+PrintNMTStatistics

你怎么想,如果我注意到他们没有‘复制’他们的功能,但我仍然不是100%,这是否足够,或者也许我可以添加/删除其中的一些而不担心丢失信息。

我的目标是尽可能多地获取jvm中正在发生的事情的信息,并调优内存/gc性能以避免oom。应用程序正在docker中的was上运行。

一些细节:JDK1.8Spring- u152 : 1.5.1

EN

回答 1

Stack Overflow用户

发布于 2018-11-15 16:57:45

目前我正在处理的情况是,应用程序只工作几秒钟甚至几分钟,并且立即死机,没有简单的日志和事件错误的下拉向导度量

进程不应该就这么死掉,它应该有一个异常或者一个崩溃转储。如果您的机器超载,那么您的进程可能会在linux上被终止以保护系统。如果发生这种情况,则应将其记录在/var/log/messages

请参阅https://unix.stackexchange.com/questions/136291/will-linux-start-killing-my-processes-without-asking-me-if-memory-gets-short

如果你的程序随机调用System.exit(int),你的SecurityManager应该阻止它,或者至少记录它。

jvm的目标是让内存优化完全记录

不幸的是,您提到的许多日志都是缓冲的,因此如果进程被终止,您可能会丢失最后几个条目,可能是日志记录的最后几分钟。这些日志对于诊断性能问题很有用,但可能无助于确定进程意外终止的原因。

调整内存/gc性能以避免oom

这是不同类型的问题。你需要尝试一下

  • 给进程更多的内存,看看进程在什么时候没有死。
  • 如果这个方法有效,你的进程需要更多的内存,如果你的进程随着时间的推移继续消耗内存,你可能会有内存泄漏。
  • 如果你一直在代码中的类似位置获取OutOfMemoryErrors,这很可能是它消耗了太多内存的地方。
  • 最有可能的是,你没有足够的内存来执行任务。然后,我会使用分析器(如飞行记录器)查看内存配置文件,看看是否可以减少使用量。在某些情况下,您要么通过减少使用来解决问题,要么必须为进程提供更多内存。

如果内存很便宜,而您的时间却不便宜,那么增加内存可能会更简单。也就是说,记住你一天的时间可以买多少内存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53296389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档