From c06463f576c031ceaa3fa73cb09f677820cb8f0a Mon Sep 17 00:00:00 2001 From: lafay <2021211506@stu.hit.edu.cn> Date: Tue, 16 Jun 2026 09:07:56 +0800 Subject: [PATCH] perf(ci): reduce build memory and CPU allocations Scale down memory limits and parallelization settings across CI build pipeline. Reduce heap from 8g to 4g, metaspace from 1g to 512m, worker count from 4 to 2, and CMAKE build parallel level from 8 to 4. Remove Gradle caching and update web export to use explicit NODE_OPTIONS for memory allocation. These optimizations reduce resource usage while maintaining stable builds. --- .gitea/workflows/build.yml | 28 ++++++++-------------------- Dockerfile.web | 2 +- plugins/withCmakeJobLimit.js | 2 +- 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 615d9af..b27d5df 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -99,12 +99,11 @@ jobs: container: image: reactnativecommunity/react-native-android:latest env: - GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.parallel=true -Dorg.gradle.workers.max=4 -Xmx8g -XX:MaxMetaspaceSize=1g -XX:+UseG1GC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:ReservedCodeCacheSize=512m" - _JAVA_OPTIONS: "-Xmx8g -XX:MaxMetaspaceSize=1g -XX:+UseG1GC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:ReservedCodeCacheSize=512m" - NODE_OPTIONS: "--max-old-space-size=8192" + GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.parallel=false -Dorg.gradle.workers.max=2 -Xmx4g -XX:MaxMetaspaceSize=512m -XX:+UseG1GC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:ReservedCodeCacheSize=256m" + _JAVA_OPTIONS: "-Xmx4g -XX:MaxMetaspaceSize=512m -XX:+UseG1GC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:ReservedCodeCacheSize=256m" + NODE_OPTIONS: "--max-old-space-size=4096" NODE_ENV: "production" - NDK_NUM_JOBS: "4" - CMAKE_BUILD_PARALLEL_LEVEL: "8" + CMAKE_BUILD_PARALLEL_LEVEL: "4" GRADLE_USER_HOME: /root/.gradle permissions: contents: read @@ -126,17 +125,6 @@ jobs: - name: Install dependencies run: npm ci - - name: Cache Gradle - uses: actions/cache@v4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - ~/.android/build-cache - key: ${{ runner.os }}-gradle-${{ hashFiles('package-lock.json') }} - restore-keys: | - ${{ runner.os }}-gradle- - - name: Generate Android native project run: npx expo prebuild --platform android @@ -243,10 +231,10 @@ jobs: # Update gradle.properties (without secrets for better cache hit rate) cat > gradle.properties << 'PROPS_EOF' org.gradle.daemon=false - org.gradle.parallel=true + org.gradle.parallel=false org.gradle.configureondemand=true - org.gradle.workers.max=4 - org.gradle.jvmargs=-Xmx8g -XX:MaxMetaspaceSize=1g -XX:+UseG1GC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError + org.gradle.workers.max=2 + org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m -XX:+UseG1GC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:ReservedCodeCacheSize=256m -XX:+HeapDumpOnOutOfMemoryError android.enableJetifier=false android.useAndroidX=true hermesEnabled=true @@ -278,7 +266,7 @@ jobs: run: | cd android chmod +x gradlew - ./gradlew :app:assembleRelease -PreactNativeArchitectures=arm64-v8a --max-workers=4 --parallel + ./gradlew :app:assembleRelease -PreactNativeArchitectures=arm64-v8a --max-workers=2 - name: Upload APK artifact uses: actions/upload-artifact@v3 diff --git a/Dockerfile.web b/Dockerfile.web index 2b90fbb..ec371e2 100644 --- a/Dockerfile.web +++ b/Dockerfile.web @@ -6,7 +6,7 @@ COPY package.json package-lock.json ./ RUN npm ci COPY . . -RUN npx expo export --platform web --output-dir dist-web +RUN NODE_OPTIONS="--max-old-space-size=2048" node /app/node_modules/.bin/expo export --platform web --output-dir dist-web FROM nginx:1.27-alpine diff --git a/plugins/withCmakeJobLimit.js b/plugins/withCmakeJobLimit.js index 3267367..f1468f8 100644 --- a/plugins/withCmakeJobLimit.js +++ b/plugins/withCmakeJobLimit.js @@ -2,7 +2,7 @@ const { withDangerousMod } = require('@expo/config-plugins'); const fs = require('fs'); const path = require('path'); -const MAX_JOBS = '8'; +const MAX_JOBS = '4'; // React Native's hermes-engine build hardcodes // Runtime.getRuntime().availableProcessors()