Debian系统Node.js资源如何监控
导读:Debian系统下监控Node.js资源的常用方法 1. 使用PM2进行进程管理与实时监控 PM2是Node.js生态中最流行的进程管理工具之一,不仅能保持应用持续运行,还能提供实时资源监控功能。 安装PM2:通过npm全局安装,命令为s...
Debian系统下监控Node.js资源的常用方法
1. 使用PM2进行进程管理与实时监控
PM2是Node.js生态中最流行的进程管理工具之一,不仅能保持应用持续运行,还能提供实时资源监控功能。
- 安装PM2:通过npm全局安装,命令为
sudo npm install -g pm2
。 - 启动应用并监控:使用
pm2 start app.js --name "my-node-app"
启动应用,--watch
参数可自动重启修改后的文件;pm2 monit
命令会打开实时监控面板,显示CPU、内存使用率、进程状态及日志输出;pm2 list
可查看所有进程的基本信息(如CPU、内存占比)。 - 日志与历史记录:
pm2 logs
查看实时日志,pm2 save
保存当前进程列表,pm2 startup
设置开机自启。
2. 利用Node.js内置模块监控资源
Node.js原生提供的process
和os
模块可直接获取内存、CPU等资源信息,无需额外依赖。
- 内存监控:通过
process.memoryUsage()
获取内存使用详情,返回对象包含:rss
(Resident Set Size):进程占用的物理内存总量(包括堆、栈、代码段等);heapTotal
/heapUsed
:V8堆内存的总大小和已使用量;external
:C++对象占用的内存(如Buffer、Native模块)。
示例代码:
const memory = process.memoryUsage(); console.log(`RSS: ${ (memory.rss / 1024 / 1024).toFixed(2)} MB`); console.log(`Heap Used: ${ (memory.heapUsed / 1024 / 1024).toFixed(2)} MB`);
- CPU监控:
process.cpuUsage()
:返回用户态(user
)和系统态(system
)的CPU时间(微秒),可通过两次调用的差值计算使用率;process.hrtime()
:高精度时间计算(纳秒),用于计算代码块的执行时间。
示例代码(计算1秒内的CPU使用率):
const startUsage = process.cpuUsage(); const startHr = process.hrtime(); // 模拟CPU密集型任务 for (let i = 0; i < 1e7; i++) { } const endUsage = process.cpuUsage(startUsage); const endHr = process.hrtime(startHr); const cpuTime = (endUsage.user + endUsage.system) / 1e6; // 微秒转毫秒 const elapsedTime = (endHr[0] * 1e9 + endHr[1]) / 1e9; // 纳秒转秒 console.log(`CPU Usage: ${ (cpuTime / elapsedTime * 100).toFixed(2)} %`);
- 系统负载:
os.loadavg()
返回1、5、15分钟的系统平均负载(CPU任务队列长度),os.cpus()
返回每个CPU核心的使用情况(用户态、内核态、空闲时间等)。
3. 第三方监控工具(Prometheus+Grafana)
对于生产环境,推荐使用**Prometheus(数据采集)+ Grafana(可视化)**组合,实现全面的资源监控与告警。
- Prometheus配置:
- 安装Prometheus:
wget https://github.com/prometheus/prometheus/releases/download/v2.34.0/prometheus_2.34.0.linux-amd64.deb & & sudo dpkg -i prometheus_2.34.0.linux-amd64.deb
; - 编辑配置文件
/etc/prometheus/prometheus.yml
,添加Node.js抓取任务:scrape_configs: - job_name: 'node' static_configs: - targets: ['localhost:9100'] # 需安装node_exporter
- 重启Prometheus:
sudo systemctl restart prometheus
。
- 安装Prometheus:
- Node.js Exporter:使用
node_exporter
(Prometheus的Node.js客户端)暴露应用指标,命令为wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz & & tar xvfz node_exporter-*.tar.gz & & cd node_exporter-* & & ./node_exporter &
(默认监听9100端口)。 - Grafana可视化:
- 安装Grafana:
wget https://dl.grafana.com/oss/release/grafana-8.2.0.linux-amd64.tar.gz & & tar -zxvf grafana-8.2.0.linux-amd64.tar.gz & & sudo mv grafana-8.2.0 /opt/grafana
; - 启动Grafana:
sudo /opt/grafana/bin/grafana-server
; - 访问
http://< 服务器IP> :3000
(默认账号admin
/admin
),添加Prometheus为数据源,导入Node.js监控模板(如ID:1860),即可查看CPU、内存、请求延迟等可视化图表。
- 安装Grafana:
4. 系统自带命令行工具
Debian系统的top
、htop
、ps
等命令可快速查看Node.js进程的资源占用情况。
- top命令:运行
top
后,按Shift+P
按CPU排序,Shift+M
按内存排序,找到Node.js进程(通常为node
),查看%CPU
(CPU使用率)、%MEM
(内存使用率)、RES
(常驻内存)等指标。 - htop命令:更友好的交互式工具,需安装(
sudo apt install htop
),支持颜色高亮、鼠标操作,直接显示进程的CPU、内存、线程等信息。 - ps命令:精准查看特定进程的资源使用,例如
ps -p $(pgrep -f "app.js") -o %cpu,%mem,rss,vsz,cmd
(%cpu
:CPU使用率;%mem
:内存使用率;rss
:常驻内存;vsz
:虚拟内存;cmd
:命令行)。
5. 日志记录资源使用情况
通过代码定期记录资源使用情况,便于后续分析和排查问题。
- 内存日志:使用
setInterval
定时输出内存信息,例如:setInterval(() => { const memory = process.memoryUsage(); console.log(`[${ new Date().toISOString()} ] Memory: RSS=${ memory.rss / 1024 / 1024} MB, HeapUsed=${ memory.heapUsed / 1024 / 1024} MB`); } , 5000); // 每5秒记录一次
- CPU日志:结合
process.cpuUsage()
和process.hrtime()
,记录CPU使用率变化,例如:let lastCpuUsage = process.cpuUsage(); let lastHr = process.hrtime(); setInterval(() => { const currentCpu = process.cpuUsage(lastCpuUsage); const currentHr = process.hrtime(lastHr); const cpuTime = (currentCpu.user + currentCpu.system) / 1e6; // 微秒转毫秒 const elapsedTime = (currentHr[0] * 1e9 + currentHr[1]) / 1e9; // 纳秒转秒 const cpuUsage = (cpuTime / elapsedTime * 100).toFixed(2); console.log(`[${ new Date().toISOString()} ] CPU Usage: ${ cpuUsage} %`); lastCpuUsage = process.cpuUsage(); lastHr = process.hrtime(); } , 5000);
- 日志持久化:使用
winston
或pino
等日志库,将资源使用情况写入文件,例如:const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.File({ filename: 'resource-usage.log' } ) ] } ); setInterval(() => { const memory = process.memoryUsage(); logger.info('Memory Usage', { rss: memory.rss, heapUsed: memory.heapUsed } ); } , 5000);
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian系统Node.js资源如何监控
本文地址: https://pptw.com/jishu/720019.html