Nodejs 有什么好的监控工具可以监控某个脚本的运行时间

Nodejs 有什么好的监控工具可以监控某个脚本的运行时间

我们在java里面可以监控某个servlet的运行时间,并且可以排名请问在node.js里面有什么工具可以类似监控对请求的相应,然后根据时间区间来排序,方便工程师对慢脚本的定位和优化?

7 回复

Node.js 监控工具推荐:监控脚本运行时间

在 Node.js 中,监控脚本的运行时间并进行性能分析是一个常见的需求。以下是一些流行的工具可以帮助你实现这一目标:

1. PM2

PM2 是一个非常强大的进程管理器,它不仅可以管理你的应用进程,还可以提供详细的性能监控信息。

安装 PM2:

npm install -g pm2

启动应用并启用监控:

pm2 start app.js --name "myApp"
pm2 monit

monit 模式下,PM2 会显示每个进程的运行状态、CPU 和内存使用情况等详细信息。

2. Node-Profiler

Node-Profiler 是一个轻量级的性能分析库,可以用来监控 Node.js 应用程序的性能。

安装 Node-Profiler:

npm install --save node-profiler

使用 Node-Profiler:

const profiler = require('node-profiler');

profiler.startProfiling();
// 运行你的脚本
setTimeout(() => {
    const profile = profiler.stopProfiling();
    console.log(profile);
    profile.delete();
}, 5000);

3. New Relic

New Relic 是一个全面的应用性能监控工具,支持 Node.js 应用。它可以提供详细的性能指标,包括响应时间、吞吐量等。

安装 New Relic:

npm install newrelic

配置 New Relic: 创建一个 newrelic.js 文件:

module.exports = {
    app_name: 'My Application',
    license_key: 'YOUR_LICENSE_KEY',
    logging: {
        level: 'info'
    }
};

启动应用并集成 New Relic:

NEW_RELIC_CONFIG_FILE=newrelic.js node app.js

示例代码:使用 PM2 监控脚本运行时间

假设我们有一个简单的 Node.js 脚本 app.js:

// app.js
console.log("Starting the script...");
setTimeout(() => {
    console.log("Script finished.");
}, 3000);

启动应用并启用监控:

pm2 start app.js --name "myApp"
pm2 monit

通过上述方法,你可以轻松地监控 Node.js 应用的运行时间,并对慢脚本进行定位和优化。


个人比较喜欢直接在nginx上面做

+1, 参考: https://speakerdeck.com/tomgco/easy-cpu-profiling

pm2,可以看server的时间,但是你说的这个我也等等人看。

strong ops可以開發階段使用一下 如果覺得難用 自己開發一個咯

换种思路,每个handler报告自己的运行情况?

在 Node.js 中监控某个脚本或 API 请求的运行时间可以通过多种工具实现。一个简单而有效的选择是使用 clinic 库。clinic 提供了多种诊断工具,可以帮助我们分析 Node.js 应用程序的性能问题。

使用 Clinic 监控 Node.js 脚本

Clinic 提供了 doctorbubbleprofflame 等命令行工具。其中,bubbleprof 可以帮助我们分析应用程序的性能瓶颈,包括运行时间较长的函数调用。

示例代码

首先,安装 clinic

npm install -g clinic

创建一个简单的 Express 应用程序,例如 app.js

const express = require('express');
const app = express();

app.get('/slow', (req, res) => {
    // 模拟耗时操作
    setTimeout(() => {
        res.send('Slow response');
    }, 3000);
});

app.get('/fast', (req, res) => {
    res.send('Fast response');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

接下来,使用 clinic bubbleprof 来分析这个应用:

clinic bubbleprof -- node app.js

在浏览器中访问 /slow/fast,完成后按 Ctrl+C 结束分析。

Clinic 将自动生成一个 HTML 文件,你可以通过浏览器打开它来查看详细的性能报告,包括每个请求的响应时间和调用栈信息。

使用 Custom Middleware 监控

如果你希望在不依赖外部工具的情况下进行监控,可以在 Express 应用程序中添加一个自定义中间件来记录请求的响应时间:

const express = require('express');
const app = express();
const startTimes = {};

app.use((req, res, next) => {
    startTimes[req.path] = Date.now();
    res.on('finish', () => {
        const duration = Date.now() - startTimes[req.path];
        console.log(`Request to ${req.path} took ${duration}ms`);
    });
    next();
});

// 定义路由
app.get('/slow', (req, res) => {
    setTimeout(() => {
        res.send('Slow response');
    }, 3000);
});

app.get('/fast', (req, res) => {
    res.send('Fast response');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

这段代码会记录每个请求的开始和结束时间,并计算响应时间。你可以在控制台中看到每个请求的响应时间。

这两种方法都可以帮助你监控 Node.js 应用程序中的请求响应时间,从而更好地定位和优化慢脚本。

回到顶部