1. 名詞說明:
1. Node.js 是一個基於Chrome JavaScript 運行時建立的一個平臺, 用來方便地搭建快速的, 易於擴展的網絡應用。類似php、java等服務器端語言。
2. NPM的全稱是Node Package Manager,是一個NodeJS包管理和分發工具。簡單一點說就是插件管理工具
3. PM2 is perfect when you need to spread your stateless Node.js code accross all CPUs available on a server, to keep all processes alive forever and to 0s reload them.
nodejs 項目的發佈和管理工具
2. 安裝
1. 下載 nodejs的安裝包 http://www.nodejs.org/download/
有多個版本選擇,windows、linux、mac 我這裏選擇linux64位
這也就能直接複製文件的url地址
1.源碼安裝 (推薦)
下載源碼到本地 wget http://nodejs.org/dist/v0.10.29/node-v0.10.29.tar.gz
在命令行中輸入:
tar -zxvf 文件名
cd node-v0.10.29
./configure
sudo make
sudo make install
如果沒報錯,
輸入 node -v 查看node的安裝版本
輸入 npm -v 查看npm的版本
2 . 直接安裝
wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-x64.tar.gz
下載好了後,解壓:tar -zxvf node-v0.10.28-linux-x64.tar.gz
解壓後不需要安裝,直接把bin目錄加到環境變量中即可。
3.nodejs 程序運行管理
1. node 啓動x項目
最簡單的nodejs web程序
var http = require('http'),
server = http.createServer(function (req, res) {
res.writeHeader(200, {"Content-Type": "text/plain"});
res.end("Hello World\n");
});
server.listen(3001,function(){
console.log("http start 3001");
});
保存以上代碼 到 app.js 文件,開始運行
node app.js
在瀏覽器輸入http://localhost:3001/ 即可看到輸出 hello wolrd。
以上爲簡陋的項目啓動方式,如果你退出終端,項目就停止運行了,也沒有詳細的內存和使用時長、日誌等信息。
2. 神器 pm2
1.安裝pm2 官方文檔 https://github.com/Unitech/pm2
npm install pm2@latest -g
想要啓動一個使用所有CPU核心的集羣,你只需要鍵入如下的指令:
$ pm2 start app.js -i max
pm2 start app.js -i 3 # Will start 3 processes
然後:
$ pm2 list
然後就會顯示類似下面的東西(ASCII UI FTW);
就像你看到的,現在你的應用有多少個進程就取決於你的CPU核心數了
按照termcaps-HTOP(Linux下的系統監控與進程管理軟件)的方式管理
通過pm2 list命令來觀察所有運行的進程以及它們的狀態已經足夠好了.但是怎麼來追蹤它們的資源消耗呢?別擔心,用這個命令:
$ pm2 monit
你可以得到進程(以及集羣)的CPU的使用率和內存佔用.
聲明:node-usage到目前爲止還不支持MacOS(隨便什麼性能要求),不過它在Linux下運行良好.
現在,讓我們來覈實一下我們的集羣,還有對內存堆棧的垃圾回收,我們假設你已經有一個HTTP基準測試工具(如果沒有,你一定要使用WRK):
1 2 3 4 5 |
$ express bufallo
//Create an express app $ cd bufallo $ npm install $ pm2 start app.js -i max $ wrk -c 100 -d 100 http://localhost:3000/ |
$ pm2 monit
耶~
實時集中log處理
現在你不得不管理多個集羣進程:一個爬取數據,一個處理數據,等等…這就意味着大量log,你可以按照老式的方法處理:
$ tail -f /path/to/log1 /path/to/log2 ...
但我們想的很周到,我們增加了logs功能:
$ pm2 logs
快速恢復
現在事情一切順利,你的進程嗡嗡的運行着,你需要做一次硬重啓(hard restart).現在嗎?是的,首先,dump掉:
$ pm2 dump
然後,你可以從文件中恢復它:
$ pm2 kill //讓我們假設一個PM2停掉了
$ pm2 resurect //我所有的進程又滿血滿狀態復活了