Прежде чем ответить, нам нужно позаботиться о нескольких фактах:
- Node.js не использует только один ЦП, но каждая асинхронная операция c ввода-вывода может использовать дополнительные ЦП
- время, возвращаемое
process.cpuUsage
, является совокупным для всех ЦП, используемых процессом Node.js
, поэтому для расчета использования ЦП Node.js с учетом всех ЦП хоста , мы могли бы использовать что-то вроде:
const ncpu = require("os").cpus().length;
let previousTime = new Date().getTime();
let previousUsage = process.cpuUsage();
let lastUsage;
setInterval(() => {
const currentUsage = process.cpuUsage(previousUsage);
previousUsage = process.cpuUsage();
// we can't do simply times / 10000 / ncpu because we can't trust
// setInterval is executed exactly every 1.000.000 microseconds
const currentTime = new Date().getTime();
// times from process.cpuUsage are in microseconds while delta time in milliseconds
// * 10 to have the value in percentage for only one cpu
// * ncpu to have the percentage for all cpus af the host
// this should match top's %CPU
const timeDelta = (currentTime - previousTime) * 10;
// this would take care of CPUs number of the host
// const timeDelta = (currentTime - previousTime) * 10 * ncpu;
const { user, system } = currentUsage;
lastUsage = { system: system / timeDelta, total: (system + user) / timeDelta, user: user / timeDelta };
previousTime = currentTime;
console.log(lastUsage);
}, 1000);
или мы можем прочитать значение lastUsage
там, где оно нам нужно, а не распечатать его на консоли.