解決策がわかんなくてハゲそうだったので、Qiitaに書いて整理してたら解決しました。Qiitaすごい!!!!!
環境
- OS
- CentOS 6.4, x86_64
- EC2インスタンスです
- CentOS 6.4, x86_64
- node.js
- v0.10.21
- nvmでuserディレクトリにinstallしてます
- npm
- v1.3.11
症状
たとえばjshintをinstallしようとすると、こんなかんじです。
$ npm install -g jshint
npm http GET https://registry.npmjs.org/jshint
npm http 304 https://registry.npmjs.org/jshint
npm http GET https://registry.npmjs.org/jshint/-/jshint-2.3.0.tgz
npm http 200 https://registry.npmjs.org/jshint/-/jshint-2.3.0.tgz
Killed
当該packageはDLできてるっぽいんですけど、そのあとしばらく停止してKilled
って返ってくる…
試しにcurrentにinstallしてみる
gオプションつけないでやってみた
$ mkdir jshint
$ cd jshint/
$ npm install jshint
npm http GET https://registry.npmjs.org/jshint
npm http 304 https://registry.npmjs.org/jshint
npm http GET https://registry.npmjs.org/underscore
npm http GET https://registry.npmjs.org/shelljs
npm http GET https://registry.npmjs.org/cli
npm http GET https://registry.npmjs.org/minimatch
npm http GET https://registry.npmjs.org/console-browserify
npm http 200 https://registry.npmjs.org/console-browserify
npm http 200 https://registry.npmjs.org/underscore
npm http GET https://registry.npmjs.org/console-browserify/-/console-browserify-0.1.6.tgz
npm http 200 https://registry.npmjs.org/cli
npm http 200 https://registry.npmjs.org/shelljs
npm http 200 https://registry.npmjs.org/minimatch
Killed
依存packageも解決しようとしてるけど、DLまでいけてないかんじ…?
原因&解決
「なんだこれまじでハゲそう」と思いながらググってたら、"Killed"ってレスポンスはどうやらnpm自体というよりはNode.js自体から返ってきてそう、みたいな予感がしてきた。たぶんプロセスが途中で落ちてる。
で、そういえばEC2インスタンスってswapないんだよなあ、なんてことを思い出して、それ(swap)使えないことでメモリ足りなくなって落ちてるんじゃね?とか思い始めて、以下のエントリを参考にswapを作ってみた。
AWS - 1分でできる!AmazonEC2のmicroインスタンスでswap領域を作る - Qiita [キータ]
そうすると、
$ npm install -g jshint
(中略…)
$HOME/.nvm/v0.10.21/bin/jshint -> $HOME/.nvm/v0.10.21/lib/node_modules/jshint/bin/jshint
jshint@2.3.0 $HOME/.nvm/v0.10.21/lib/node_modules/jshint
├── console-browserify@0.1.6
├── underscore@1.4.4
├── shelljs@0.1.4
├── minimatch@0.2.12 (sigmund@1.0.0, lru-cache@2.3.1)
└── cli@0.4.5 (glob@3.2.6)
あっ、installできた。
おわりに
必要以上に騒ぎ立てた感満載なエントリですが、とりあえずswap領域は大事なんだなあ、と実感した出来事でした。
(たぶんnpmが再帰的にpackageをたくさんinstallするような動きをするので、メモリが足らなくなったんだろうなあ)
おわり。