我很难将我的 React 应用程序部署到生产环境中,因为它返回了:
yarn build
yarn run v1.22.19
$ react-app-rewired build
Creating an optimized production build...
The build failed because the process exited too early. This probably means the system ran out of memory or someone called `kill -9` on the process.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 1.
这是我的 bitbucket 管道文件:
image: atlassian/default-image:3
pipelines:
branches:
stage: #STAGE
- step:
name: Build docker
deployment: Staging
services:
- docker
image: node:16-alpine
size: 2x
script:
- export NODE_OPTIONS=--max-old-space-size=8192
- yarn install
- yarn build
- echo $REACT_APP_AUTH
- echo $REACT_APP_MEMBERSHIP
- docker login -u $DOCKER_HUB_ID -p $DOCKER_HUB_PASSWORD
- docker build -t evoeccdocker/membership_front:stage --build-arg REACT_APP_AUTH=$REACT_APP_AUTH --build-arg REACT_APP_MEMBERSHIP=$REACT_APP_MEMBERSHIP --build-arg REACT_APP_PAYMENT=$REACT_APP_PAYMENT --build-arg REACT_APP_APPLICATION_ID=$REACT_APP_APPLICATION_ID --build-arg REACT_APP_APPLICATION_KEY=$REACT_APP_APPLICATION_KEY --build-arg REACT_APP_TINYMCE=$REACT_APP_TINYMCE --build-arg REACT_APP_GOOGLE_CLIENT_ID=$REACT_APP_GOOGLE_CLIENT_ID --build-arg REACT_APP_GOOGLE_ANALYTICS=$REACT_APP_GOOGLE_ANALYTICS --build-arg REACT_APP_PAYMENT_PAGE_STORAGE_ENCRYPT_SALT=$REACT_APP_PAYMENT_PAGE_STORAGE_ENCRYPT_SALT --build-arg REACT_APP_PAYPAL_CLIENT_ID=$REACT_APP_PAYPAL_CLIENT_ID -f ./Dockerfile-stage .
- docker push evoeccdocker/membership_front:stage
caches:
- docker
- nodecustom
- yarn
master: #MASTER
- step:
name: Build docker
image: node:16-alpine
size: 2x
deployment: Production
services:
- docker
script:
- export NODE_OPTIONS=--max-old-space-size=8192
- yarn install
- yarn build
- docker login -u $DOCKER_HUB_ID -p $DOCKER_HUB_PASSWORD
- docker build -t evoeccdocker/membership_front:prod --build-arg REACT_APP_AUTH=$REACT_APP_AUTH --build-arg REACT_APP_MEMBERSHIP=$REACT_APP_MEMBERSHIP --build-arg REACT_APP_PAYMENT=$REACT_APP_PAYMENT --build-arg REACT_APP_APPLICATION_ID=$REACT_APP_APPLICATION_ID --build-arg REACT_APP_APPLICATION_KEY=$REACT_APP_APPLICATION_KEY --build-arg REACT_APP_TINYMCE=$REACT_APP_TINYMCE --build-arg REACT_APP_GOOGLE_CLIENT_ID=$REACT_APP_GOOGLE_CLIENT_ID --build-arg REACT_APP_GOOGLE_ANALYTICS=$REACT_APP_GOOGLE_ANALYTICS --build-arg REACT_APP_PAYMENT_PAGE_STORAGE_ENCRYPT_SALT=$REACT_APP_PAYMENT_PAGE_STORAGE_ENCRYPT_SALT --build-arg REACT_APP_PAYPAL_CLIENT_ID=$REACT_APP_PAYPAL_CLIENT_ID -f ./Dockerfile-prod .
- docker push evoeccdocker/membership_front:prod
caches:
- docker
- nodecustom
- yarn
definitions:
caches:
nodecustom: ./node_modules
yarn: /usr/local/share/.cache/yarn
有人知道如何解决这个问题吗?或者有没有一种简单的方法可以找出哪个包或插件导致了内存使用高峰?
问题中没有足够的信息来给出确切的原因和解决方案。因此,您必须启用额外的日志记录和调试消息,以显示有关构建过程中发生的情况的更多信息。
您需要持续监控 Docker 容器内的内存使用情况,并显示构建过程中哪些进程正在运行。
因此,在“
yarn build
”命令之前,添加如下内容:
- while true; do ps -aux && sleep 5; done &
- while true; do echo "Memory usage in megabytes:" && echo $((`cat /sys/fs/cgroup/memory/memory.memsw.usage_in_bytes | awk '{print $1}'`/1048576)) && sleep 2; done &
- yarn build
这将每 2 秒显示一次内存使用情况,并显示哪些进程正在运行。这将在 CI/CD 构建期间在 Docker 容器内实时发生。
从那里,您可以检查哪个命令使用了太多内存。也许它创建了太多并行线程或进程,或者同时打开了太多文件。尝试找到一个标志来减少它创建的线程或进程的数量。