使用PM2進行進程管理與實時監控
PM2是Node.js生態中最流行的進程管理工具之一,提供了進程守護、日志管理、實時性能監控等功能,非常適合Debian環境下的Node.js應用監控。
sudo npm install pm2 -g。pm2 start app.js --name "my-node-app"啟動應用(將app.js替換為你的入口文件),--name參數用于指定應用名稱,便于后續管理。pm2 list命令查看所有由PM2管理的應用狀態,包括進程ID、運行狀態、CPU/內存使用率、重啟次數等信息。pm2 monit命令進入實時監控模式,可直觀查看應用的CPU、內存占用趨勢,以及日志輸出(支持實時滾動)。pm2 logs my-node-app查看應用日志,pm2 flush清空日志,pm2 save保存當前進程列表(防止重啟后丟失)。集成Prometheus+Grafana實現指標收集與可視化
Prometheus是一款開源的監控系統,擅長收集和存儲時間序列數據;Grafana則是可視化工具,可將Prometheus中的數據轉化為直觀的圖表。
prometheus_2.34.0.linux-amd64.deb),通過sudo dpkg -i命令安裝。編輯配置文件/etc/prometheus/prometheus.yml,添加Node.js應用的抓取任務:scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100'] # 假設Node.js應用暴露了/metrics端點
重啟Prometheus服務使配置生效:sudo systemctl restart prometheus。prom-client庫(npm install prom-client),編寫代碼暴露指標(如請求次數、響應時間、內存使用量):const promClient = require('prom-client');
const collectDefaultMetrics = promClient.collectDefaultMetrics;
collectDefaultMetrics(); // 收集默認系統指標(CPU、內存等)
// 自定義指標:HTTP請求計數
const httpRequestCounter = new promClient.Counter({
name: 'http_requests_total',
help: 'Total number of HTTP requests',
labelNames: ['method', 'route', 'status']
});
// 在Express路由中記錄指標
app.get('/', (req, res) => {
httpRequestCounter.inc({ method: req.method, route: '/', status: 200 });
res.send('Hello World');
});
grafana-8.2.0.linux-amd64.tar.gz),解壓后啟動服務(sudo ./bin/grafana-server)。訪問http://localhost:3000登錄(默認賬號admin,密碼admin),添加Prometheus作為數據源(配置URL為http://localhost:9090)。1860),即可查看CPU使用率、內存占用、請求延遲等指標的實時圖表。利用系統自帶工具進行基礎監控
Debian系統自帶的工具可快速查看系統資源使用情況,輔助定位Node.js應用的性能瓶頸。
top更直觀。安裝命令:sudo apt install htop,運行后可通過方向鍵排序(如按CPU或內存使用率),查看Node.js進程的資源占用。vmstat 1(每秒刷新一次),重點關注r(運行隊列長度)、free(空閑內存)、us(用戶態CPU使用率)等指標。iostat -x 1,查看%util(磁盤利用率)、await(IO等待時間)等指標,判斷是否因IO瓶頸導致應用變慢。借助第三方APM工具實現深度性能分析
第三方APM(應用性能管理)工具提供更全面的性能洞察,包括請求鏈路追蹤、錯誤分析、數據庫查詢監控等。
npm install newrelic --save),配置newrelic.js文件(填寫license key),重啟應用后,New Relic會自動收集性能數據(如響應時間、數據庫查詢耗時、錯誤堆棧)。通過Web控制臺查看應用拓撲圖、慢請求分析等。sudo apt install datadog-agent),配置datadog.yaml文件(開啟Node.js集成),在應用中安裝dd-trace庫(npm install dd-trace),通過require('dd-trace').init()初始化。Datadog支持監控請求延遲、異常、資源使用等,并提供告警功能。使用Easy-Monitor進行輕量級監控
Easy-Monitor是基于Egg.js的Node.js性能監控工具,適合中小型應用,提供進程監控、錯誤日志、依賴安全等功能。
easy-monitor(npm install easy-monitor -g),在項目入口文件(如app.js)中引入:require('easy-monitor')('your-project-name')。http://localhost:12333即可查看監控面板,包括CPU/內存使用率、請求統計、錯誤日志等。內置模塊實現自定義監控
Node.js內置的process和os模塊可用于獲取應用的基本性能指標,適合需要自定義監控的場景。
process.memoryUsage()獲取內存占用情況(單位:字節),包括rss(常駐內存)、heapUsed(堆已使用)、heapTotal(堆總大?。?。示例:setInterval(() => {
const memory = process.memoryUsage();
console.log(`Memory Usage: RSS=${(memory.rss / 1024 / 1024).toFixed(2)}MB, Heap=${(memory.heapUsed / 1024 / 1024).toFixed(2)}MB`);
}, 5000); // 每5秒打印一次
process.cpuUsage()獲取CPU時間(單位:微秒),結合os.cpus()計算CPU使用率。示例:const os = require('os');
let startCpu = process.cpuUsage();
setInterval(() => {
const endCpu = process.cpuUsage(startCpu);
const userCpu = (endCpu.user / 1000000).toFixed(2); // 用戶態CPU時間(秒)
const systemCpu = (endCpu.system / 1000000).toFixed(2); // 內核態CPU時間(秒)
const totalCpu = parseFloat(userCpu) + parseFloat(systemCpu);
console.log(`CPU Usage: User=${userCpu}s, System=${systemCpu}s, Total=${totalCpu}s`);
}, 5000);
os.totalmem()(總內存)、os.freemem()(空閑內存)、os.loadavg()(系統負載)獲取系統級資源信息。