gpt4 book ai didi

node.js - AWS 弹性 beanstalk 部署失败并出现 ENOMEM 错误

转载 作者:IT老高 更新时间:2023-10-28 23:19:41 27 4
gpt4 key购买 nike

您的 AWS Elastic Beanstalk 部署失败:- 间歇性- 没有真正明显的原因

第 1 步:检查明显的日志

/var/log/eb-activity.log

  Running npm install:  /opt/elasticbeanstalk/node-install/node-v6.10.0-linux-x64/bin/npm
Setting npm config jobs to 1
npm config jobs set to 1
Running npm with --production flag
Failed to run npm install. Snapshot logs for more details.
Traceback (most recent call last):
File "/opt/elasticbeanstalk/containerfiles/ebnode.py", line 695, in <module>
main()
File "/opt/elasticbeanstalk/containerfiles/ebnode.py", line 677, in main
node_version_manager.run_npm_install(options.app_path)
File "/opt/elasticbeanstalk/containerfiles/ebnode.py", line 136, in run_npm_install
self.npm_install(bin_path, self.config_manager.get_container_config('app_staging_dir'))
File "/opt/elasticbeanstalk/containerfiles/ebnode.py", line 180, in npm_install
raise e
subprocess.CalledProcessError: Command '['/opt/elasticbeanstalk/node-install/node-v6.10.0-linux-x64/bin/npm', '--production', 'install']' returned non-zero exit status 1 (ElasticBeanstalk::ExternalInvocationError)
caused by: + /opt/elasticbeanstalk/containerfiles/ebnode.py --action npm-install

第 2 步:谷歌搜索相应的快照日志文件...

/var/log/nodejs/npm-debug.log

58089 verbose stack Error: spawn ENOMEM
58089 verbose stack at exports._errnoException (util.js:1022:11)
58089 verbose stack at ChildProcess.spawn (internal/child_process.js:313:11)
58089 verbose stack at exports.spawn (child_process.js:380:9)
58089 verbose stack at spawn (/opt/elasticbeanstalk/node-install/node-v6.10.0-linux-x64/lib/node_modules/npm/lib/utils/spawn.js:21:13)
58089 verbose stack at runCmd_ (/opt/elasticbeanstalk/node-install/node-v6.10.0-linux-x64/lib/node_modules/npm/lib/utils/lifecycle.js:247:14)
58089 verbose stack at /opt/elasticbeanstalk/node-install/node-v6.10.0-linux-x64/lib/node_modules/npm/lib/utils/lifecycle.js:211:7
58089 verbose stack at _combinedTickCallback (internal/process/next_tick.js:67:7)
58089 verbose stack at process._tickCallback (internal/process/next_tick.js:98:9)
58090 verbose cwd /tmp/deployment/application
58091 error Linux 4.4.44-39.55.amzn1.x86_64
58092 error argv "/opt/elasticbeanstalk/node-install/node-v6.10.0-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v6.10.0-linux-x64/bin/npm" "--production" "install"
58093 error node v6.10.0
58094 error npm v3.10.10
58095 error code ENOMEM
58096 error errno ENOMEM
58097 error syscall spawn
58098 error spawn ENOMEM

第 3 步:显而易见的选项...

  • 使用更大的实例就可以了...

  • 不要修复,再试一次

    • 再次部署就可以了...

    • 克隆环境就可以了……

    • 重建环境,它就可以工作了....

  • 感到肮脏和错误

最佳答案

TL;DR

您的实例(在我的情况下为 t2.micro)内存不足,因为实例启动是并行的。

破解解决方案:在实例上配置 SWAP 空间并重试

一次性登录实例时...

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo chmod 600 /var/swap.1
sudo /sbin/swapon /var/swap.1

来自/更多详细信息:How do you add swap to an EC2 instance?

在部署过程中,我们使用了一些 SWAP,但没有崩溃

Mem:   1019116k total,   840880k used,   178236k free,    15064k buffers
Swap: 1048572k total, 12540k used, 1036032k free, 62440k cached

实际分辨率

更大的实例

  • 虽然可以通过 EBS 扩展存储,但实例具有固定的 CPU 和 RAM,AWS source .
  • 花钱,这些只是开发实例,内存只是启动期间的问题

在 ElasticBeanStalk 中自动配置交换

  • 可能是 .ebextensions/
  • 开放式问题:云形成风格还是部署/重启 Hook ?

加入“无服务器”潮流

  • API Gateway + Lambda + Friends 的 promise 是我们不必处理这个问题。
  • 对于云原生微服务,您“够高”吗?它们是否适合您的问题,而像 SOA 这样陈旧/过时的东西就足够了。
  • 一旦采用云优先,恢复到本地将很困难,这是某些人的要求。

少用臃肿的包

  • 有时您会被遗留问题困扰
  • 可能是由必要的传递或子依赖引起的。它在哪里结束...分解其他人的图书馆?

说明

快速 google 发现 ENOMEM 是内存不足错误。t2.micro 实例只有 1 GB 的 RAM。

我们很少会在开发上使用这个数量;但是,ElasticBeanstalk 通过派生的工作人员并行化了部分构建过程。这意味着在SETUP期间,对于较大的包,可能会出现内存不足而导致操作失败的情况。

使用free -m我们可以看到...

开始(大量可用内存)

             total       used       free     shared    buffers     cached
Mem: 1019116 609672 409444 144 45448 240064
-/+ buffers/cache: 324160 694956
Swap: 0 0 0

在下一次滴答时内存不足)

Mem:       1019116     947232      71884        144      11544      81280
-/+ buffers/cache: 854408 164708
Swap: 0 0 0

部署过程中止

             total       used       free     shared    buffers     cached
Mem: 1019116 411892 607224 144 13000 95460
-/+ buffers/cache: 303432 715684
Swap: 0 0 0

关于node.js - AWS 弹性 beanstalk 部署失败并出现 ENOMEM 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43550502/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com