rmh*_*son 10 out-of-memory amazon-web-services node.js enomem amazon-elastic-beanstalk
您的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
Run Code Online (Sandbox Code Playgroud)
第2步:Google提供适当的快照日志文件...
/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
Run Code Online (Sandbox Code Playgroud)
第3步:明显的选择......
使用更大的实例,它的工作原理......
不要修理,再试一次
再次部署,它的工作原理......
克隆环境,它的工作原理......
重建环境,它的工作....
感觉又脏又错
rmh*_*son 13
您的实例(在我的情况下为t2.micro)内存不足,因为实例启动是并行化的.
一次性,登录实例时......
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
Run Code Online (Sandbox Code Playgroud)
从/更多细节:如何将交换添加到EC2实例?
在部署期间,我们使用了一点SWAP,但没有崩溃
Mem: 1019116k total, 840880k used, 178236k free, 15064k buffers
Swap: 1048572k total, 12540k used, 1036032k free, 62440k cached
Run Code Online (Sandbox Code Playgroud)
更大的例子
在ElasticBeanStalk中自动配置交换
.ebextensions/ 加入"无服务器"的潮流
使用较少膨胀的包
一个快速的谷歌揭示了这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
Run Code Online (Sandbox Code Playgroud)
下次打勾时内存不足)
Mem: 1019116 947232 71884 144 11544 81280
-/+ buffers/cache: 854408 164708
Swap: 0 0 0
Run Code Online (Sandbox Code Playgroud)
部署过程中止
total used free shared buffers cached
Mem: 1019116 411892 607224 144 13000 95460
-/+ buffers/cache: 303432 715684
Swap: 0 0 0
Run Code Online (Sandbox Code Playgroud)