From 29c294b2cfb778b77a1556511ba53414254ddbab Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 30 Apr 2021 14:01:14 -0700 Subject: [PATCH] Time out and dump stacks from R8 processes after 30 minutes R8 processes are sometimes hanging on the build servers. Wrap R8 with run_with_timeout to dump the stacks with jstack and kill the process after 30 minutes. Switch from running with the r8-compat-proguard shell script to running the jar directly so that jstack gets the pid of the java process. Bug: 181095653 Test: m checkbuild Test: m NetworkStackNextIntegrationTests Test: m USE_RBE=true RBE_R8=true RBE_R8_EXEC_STRATEGY=remote NetworkStackNextIntegrationTests Change-Id: If6996bd8eb39c7a8453d79e825004339c009ade2 --- java/config/config.go | 2 ++ java/dex.go | 13 +++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/java/config/config.go b/java/config/config.go index 30c6f91aa..273084c85 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -69,6 +69,8 @@ func init() { pctx.StaticVariable("JavacHeapSize", "2048M") pctx.StaticVariable("JavacHeapFlags", "-J-Xmx${JavacHeapSize}") pctx.StaticVariable("DexFlags", "-JXX:OnError='cat hs_err_pid%p.log' -JXX:CICompilerCount=6 -JXX:+UseDynamicNumberOfGCThreads") + // TODO(b/181095653): remove duplicated flags. + pctx.StaticVariable("DexJavaFlags", "-XX:OnError='cat hs_err_pid%p.log' -XX:CICompilerCount=6 -XX:+UseDynamicNumberOfGCThreads -Xmx2G") pctx.StaticVariable("CommonJdkFlags", strings.Join([]string{ `-Xmaxerrs 9999999`, diff --git a/java/dex.go b/java/dex.go index 7898e9dff..6bf0143b1 100644 --- a/java/dex.go +++ b/java/dex.go @@ -84,6 +84,11 @@ func (d *dexer) effectiveOptimizeEnabled() bool { return BoolDefault(d.dexProperties.Optimize.Enabled, d.dexProperties.Optimize.EnabledByDefault) } +func init() { + pctx.HostBinToolVariable("runWithTimeoutCmd", "run_with_timeout") + pctx.SourcePathVariable("jstackCmd", "${config.JavaToolchain}/jstack") +} + var d8, d8RE = pctx.MultiCommandRemoteStaticRules("d8", blueprint.RuleParams{ Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` + @@ -117,7 +122,10 @@ var r8, r8RE = pctx.MultiCommandRemoteStaticRules("r8", Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` + `rm -f "$outDict" && rm -rf "${outUsageDir}" && ` + `mkdir -p $$(dirname ${outUsage}) && ` + - `$r8Template${config.R8Cmd} ${config.DexFlags} -injars $in --output $outDir ` + + // TODO(b/181095653): remove R8 timeout and go back to config.R8Cmd. + `${runWithTimeoutCmd} -timeout 30m -on_timeout '${jstackCmd} $$PID' -- ` + + `$r8Template${config.JavaCmd} ${config.DexJavaFlags} -cp ${config.R8Jar} ` + + `com.android.tools.r8.compatproguard.CompatProguard -injars $in --output $outDir ` + `--no-data-resources ` + `-printmapping ${outDict} ` + `-printusage ${outUsage} ` + @@ -128,9 +136,10 @@ var r8, r8RE = pctx.MultiCommandRemoteStaticRules("r8", `$zipTemplate${config.SoongZipCmd} $zipFlags -o $outDir/classes.dex.jar -C $outDir -f "$outDir/classes*.dex" && ` + `${config.MergeZipsCmd} -D -stripFile "**/*.class" $out $outDir/classes.dex.jar $in`, CommandDeps: []string{ - "${config.R8Cmd}", + "${config.R8Jar}", "${config.SoongZipCmd}", "${config.MergeZipsCmd}", + "${runWithTimeoutCmd}", }, }, map[string]*remoteexec.REParams{ "$r8Template": &remoteexec.REParams{