尝试设置JVM标志时,Java运行时崩溃

时间:2020-02-14 22:09:09

标签: java docker jvm jvm-arguments

我在Docker容器中有一个微服务(springboot)。我还传递了很长的JVM标志列表,以便程序在该VM环境上运行,以使用每个标志组合测试延迟值。

我正在使用以下命令启动容器:

docker run --rm --name factorialorialContainer -p 8080:8080 -e JAVA_OPTIONS =“ $(cat /Users/sulekahelmini/Documents/fyp/fyp_work/MLscripts/flags.txt)“ suleka96 / factorial:latest

flags.txt看起来像这样:

-XX:-ResizePLAB -XX:+ ResizeOldPLAB -XX:+ AlwaysPreTouch -XX:-ParallelRefProcEnabled -XX:-ParallelRefProcBalancingEnabled -XX:-UseTLAB -XX:-ResizeTLAB -XX:+ ZeroTLAB -XX:+ FastTLABRefill -XX :-UseAutoGCSelectPolicy -XX:-UseAdaptiveSizePolicy -XX:+ UsePSAdaptiveSurvivorSizePolicy -XX:-UseAdaptiveGenerationSizePolicyAtMinorCollection -XX:+ UseAdaptiveGenerationSizePolicyAtMajorCollection -XX:-UseAdaptiveSizePolicyWithSystemGC -XX:+ UseAdaptiveGCBoundary -XX:+ UseAdaptiveSize-LABTalPal-Type4LABO-Size: -XX:GCTaskTimeStampEntries = 255 -XX:TargetPLABWastePct = 5 -XX:PLABWeight = 73 -XX:OldPLABWeight = 21 -XX:MarkStackSize = 5927008 -XX:MarkStackSizeMax = 579749070 -XX:RefDiscoveryPolicy = 1 -XX:InitiatingHeapOccupancyPercent = 49 -XX :ErgoHeapSizeLimit = 0 -XX:MaxRAMFraction = 3 -XX:MinRAMFraction = 3 -XX:InitialRAMFraction = 74 -XX:AutoGCSelectPauseMillis = 2934 -XX:AdaptiveSizeThroughPutPolicy = 0 -XX:AdaptiveSizePausePolicy = 0 -XX:AdaptiveSizePolicyInitializingStepS = 24 olicyOutputInterval = 4060 -XX:AdaptiveSizePolicyWeight = 11 -XX:AdaptiveTimeWeight = 69 -XX:PausePadding = 39200 -XX:PromotedPadding = 3 -XX:SurvivorPadding = 1 -XX:ThresholdTolerance = 11 -XX:AdaptiveSizePolicyCollectionCostMargin = 68 -XX:YoungGenerationSizeIncrement 28 -XX:YoungGenerationSizeSupplement = 81 -XX:YoungGenerationSizeSupplementDecay = 9 -XX:TenuredGenerationSizeIncrement = 48 -XX:TenuredGenerationSizeSupplement = 63 -XX:TenuredGenerationSizeSupplementDecay = 2 -XX:MaxGCPauseMillis = 16157174462788231168 -XX:GCPauseIntervalMillis = 3009 -XX:GCTime XX:AdaptiveSizeDecrementScaleFactor = 4 -XX:AdaptiveSizeMajorGCDecayTimeScale = 9 -XX:MinSurvivorRatio = 4 -XX:InitialSurvivorRatio = 4 -XX:BaseFootPrintEstimate = 463170010 -XX:GCHeapFreeLimit = 4 -XX:ProcessDistributionStride = 4 -Xm338224

当我运行上述docker命令时,出现以下错误:

Java运行时环境检测到致命错误:

SIGSEGV(0xb)at pc = 0x00007f9b014fe3c3,pid = 1,tid = 0x00007f9b10633b10

JRE版本:OpenJDK运行时环境(8.0_212-b04)(内部版本1.8.0_212-b04)

Java VM:OpenJDK 64位服务器VM(25.212-b04混合模式linux-amd64压缩的oops)

衍生物:IcedTea 3.12.0

分发:自定义版本(UTC 2019年5月4日星期六17:33:35)

问题框架:

j java.net.URLStreamHandler.toExternalForm(Ljava / net / URL;)Ljava / lang / String; +88

无法写入核心转储。核心转储已被禁用。要启用核心转储,请在再次启动Java之前尝试“ ulimit -c unlimited”

具有更多信息的错误报告文件另存为:

/usr/src/factorial/hs_err_pid1.log编译方法(c1)1054 256 1 java.net.URL :: getRef(5字节)在堆中总计

[0x00007f9b0166bad0,0x00007f9b0166bd60] = 656重定位
[0x00007f9b0166bbf8,0x00007f9b0166bc20] = 40个主代码
[0x00007f9b0166bc20,0x00007f9b0166bca0] = 128个存根代码
[0x00007f9b0166bca0,0x00007f9b0166bd30] = 144个范围数据
[0x00007f9b0166bd30,0x00007f9b0166bd38] = 8个示波器
[0x00007f9b0166bd38,0x00007f9b0166bd58] = 32个依赖项
[0x00007f9b0166bd58,0x00007f9b0166bd60] = 8 #

如果您要提交错误报告,请提供

有关如何重现该错误并访问的说明:

https://icedtea.classpath.org/bugzilla

我在做什么错了?

1 个答案:

答案 0 :(得分:7)

-XX:+ZeroTLAB选项已损坏。只是不要使用此标志。

我猜想这里涉及一个随机选项生成器,以进行性能调整。尽管这个主意很好,并且在已知案例中, 1,2 当使用贝叶斯优化的机器学习帮助找到更好的JVM选项值时,这里的重点是在实验中仅包括那些选项您理解的含义和含义

实验还应注意每个选项的合理范围,以及关联选项之间的相互关系

但是,上面的选项列表看起来完全是随机的,没有太大意义(也许,除了JVM测试之外)。这样的配置可能会产生不可预测的结果,包括JVM崩溃,这一点不足为奇。


1 Automated Tuning of the JVM with Bayesian Optimization
2 Performance tuning Twitter services with Graal and Machine Learning

相关问题