在接手一個Node項目的時候,npm install
。卻出現了”killed”的錯誤。以為是Node版本的問題,熟練地切換了0.11與0.10版,同樣無解。
由於新的npm版本吧,npm install
的時候已經無法看到常規的log信息了。以npm install -d
查看安裝的過程,發現無任何特殊的地方。在一定程度的時候,直接被”killed”。關於npm install -d
可以看 npm config
-v: --version
-h, -?, --help, -H: --usage
-s, --silent: --loglevel silent
-q, --quiet: --loglevel warn
-d: --loglevel info
-dd, --verbose: --loglevel verbose
-ddd: --loglevel silly
-g: --global
-C: --prefix
-l: --long
-m: --message
-p, --porcelain: --parseable
-reg: --registry
-f: --force
-desc: --description
-S: --save
-D: --save-dev
-O: --save-optional
-B: --save-bundle
-E: --save-exact
-y: --yes
-n: --yes false
ll and la commands: ls --long
最后才想到,可能是內存不夠了。由於是以vagrant啟動的一台ubuntu14.04的虛擬機,默認只有500M的內存。而且該項目會用到一些底層的npm包,會編譯一些代碼。這就導致了內存不夠用。
可以查一下相應的系統log,在路徑 /var/log
之下,確認自己的問題。如/var/log/syslog
和 /var/log/messages
等。
Solution
1. 增大內存。
由於我是虛擬機,所有增大內存相對簡單。在vagrantfile里,只需要增加一條:
config.vm.provider "virtualbox" do |v|
v.memory = 1024
end
即可。
2. 利用swap file實現虛擬內存
使用
sudo swapon -s
查看系統是否配置了交換區域。沒有的話, 便直接開始創建swap file。
創建一個1G的文件。
sudo fallocate -l 1G /swapfile
使用
ls -lh /swapfile
確認是否是自己所需要的文件大小。
啟用Swap文件
首先調整文件的權限,若該文件能被其他用戶隨意的讀寫,則會產生很大的安全隱患。
sudo chmod 600 /swapfile
現在安全多了,可以讓系統開始設置交換區域了。
sudo mkswap /swapfile
啟用該文件
sudo swapon /swapfile
現在基本的步驟已經完成了,可以使用最初的命令驗證swap file是否正確使用。
sudo swapon -s
Filename Type Size Used Priority
/swapfile file 1048572 0 -1
交換分區已經成功設置,系統會在必要的時候使用它。
注意
現在已經啟用了swap文件,但當我們重啟的時候,系統不會自動地啟用該swap文件。可以通過修改fstab
文件實現開機使用swap文件。
用root權限編輯
sudo vim /etc/fstab
在文件的最后,需要添加一行告訴操作系統自動使用swap文件。
/swapfile none swap sw 0 0
如此再npm install
的時候,便解決了所有的問題了。