title: AWS elastic beanstalk deploy fails with ENOMEM error
body: <p>Your AWS Elastic Beanstalk deployment fails:
  - Intermittent
  - For no real apparent reason</p>
  
  <p>Step 1: Check obvious log</p>
  
  <p>/var/log/eb-activity.log</p>
  
  <pre><code>  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 &lt;module&gt;
        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
  </code></pre>
  
  <p>Step 2: Google for appropriate Snapshot log file...</p>
  
  <p>/var/log/nodejs/npm-debug.log</p>
  
  <pre><code>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
  </code></pre>
  
  <p>Step 3: Obvious options...</p>
  
  <ul>
  <li><p>Use a bigger instance and it works...</p></li>
  <li><p>Don't fix, just try again</p>
  
  <ul>
  <li><p>Deploy again and it works...</p></li>
  <li><p>Clone the environment and it works...</p></li>
  <li><p>Rebuild the environment and it works....</p></li>
  </ul></li>
  <li><p>Are left feeling dirty and wrong</p></li>
  </ul>