我正在尝试为spring boot微服务调优生产JVM,现在我列出了这个列表
-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
发布于 2018-11-15 16:57:45
目前我正在处理的情况是,应用程序只工作几秒钟甚至几分钟,并且立即死机,没有简单的日志和事件错误的下拉向导度量
进程不应该就这么死掉,它应该有一个异常或者一个崩溃转储。如果您的机器超载,那么您的进程可能会在linux上被终止以保护系统。如果发生这种情况,则应将其记录在/var/log/messages中
如果你的程序随机调用System.exit(int),你的SecurityManager应该阻止它,或者至少记录它。
jvm的目标是让内存优化完全记录
。
不幸的是,您提到的许多日志都是缓冲的,因此如果进程被终止,您可能会丢失最后几个条目,可能是日志记录的最后几分钟。这些日志对于诊断性能问题很有用,但可能无助于确定进程意外终止的原因。
调整内存/gc性能以避免oom
这是不同类型的问题。你需要尝试一下
如果内存很便宜,而您的时间却不便宜,那么增加内存可能会更简单。也就是说,记住你一天的时间可以买多少内存。
https://stackoverflow.com/questions/53296389
复制相似问题