Ubuntu系统监控Node.js运行的常用方法
PM2是Node.js生态中最流行的进程管理工具,不仅能保持应用持续运行(自动重启崩溃的进程),还提供实时监控功能。
sudo npm install pm2 -g;pm2 start app.js --name "my-app"。pm2 monit可打开实时监控面板,显示应用的CPU、内存使用率、日志输出及进程状态;pm2 status查看所有进程的详细信息(如运行状态、CPU/内存占用、重启次数);pm2 logs my-app实时查看应用日志(支持过滤关键字)。Ubuntu自带的命令行工具可快速查看Node.js进程的系统资源使用情况,适合快速排查资源瓶颈。
top更直观。安装命令:sudo apt install htop;运行后通过F3搜索“node”进程,查看其实时CPU、内存、线程使用情况。top命令实时显示系统进程的资源占用(按M按内存排序,按P按CPU排序);ps aux | grep node快速查找Node.js进程的PID及资源使用情况。vmstat 1每秒刷新一次系统整体资源使用情况(包括内存、CPU、IO);iostat -x 1查看磁盘IO的详细指标(如读写速率、等待时间)。将Node.js应用作为系统服务运行,借助systemd实现开机自启、状态监控及日志管理。
sudo nano /etc/systemd/system/my-app.service,内容如下(根据实际路径修改):[Unit]
Description=Node.js Application Service
After=network.target
[Service]
Type=simple
User=your-username
WorkingDirectory=/path/to/your/app
ExecStart=/usr/bin/node /path/to/your/app/app.js
Restart=always # 应用崩溃时自动重启
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload重新加载服务配置;sudo systemctl start my-app启动服务;sudo systemctl status my-app查看服务状态(包括进程PID、运行时间、最近日志);sudo journalctl -u my-app -f实时查看应用日志。第三方APM(应用性能管理)工具提供全面的性能分析、错误跟踪及可视化功能,适合生产环境。
prom-client库,定义指标(如HTTP请求延迟、内存使用)并暴露/metrics端点;Prometheus配置抓取目标(指向应用的/metrics端点);Grafana添加Prometheus数据源,创建仪表板展示指标。Node.js内置模块可用于获取应用级别的性能数据,结合日志库可实现自定义监控。
process.memoryUsage():返回应用的内存使用情况(如rss(常驻内存)、heapUsed(堆内存使用));process.cpuUsage():返回应用的CPU使用时间(用户态+内核态);process.hrtime():高精度计时器,用于计算代码执行时间。winston或bunyan等日志库记录应用的关键事件(如请求处理、错误发生、数据库操作),例如:const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' }),
new winston.transports.Console()
]
});
logger.info('Application started');
logger.error('Something went wrong!', error);
日志可用于后续分析应用的运行状态及故障原因。