氯-金属
读取的节点模块 c组 度量衡。 从 /sys/fs/cgroup/。 。 。 .
内存计量 :
内存 从路径读取 /sys/fs/cgroup/memory/memory数字 :
原始值 :
stat.rss: # 匿名和互换缓存存储的字节kmem.usage_in_bytes: 当前内核内存分配limit_in_bytes: 内存使用限制
计算值 :
containerUsage()数字 :stats.rss+ 键kmem.usage_in_bytescontainerUsagePercentage()数字 :stats.rss+ 键kmem.usage_in_bytes编号 :limit_in_bytes
CPU 度量衡 :
原始 CPU 值 :
CPU 软件 从路径读取 /sys/fs/cgroup/数字 :
cpuacct.usage: 系统内这个croup获得的容器(所有任务获得CPU时间)开始以来的CPU总时间(以纳米秒计)cpuacct.stat: 报告用户和系统CPU在这个croup中所有任务所消耗的时间(包括等级中较低的任务)user: CPU 时间( 以纳米秒计) 由 cgroup 在用户模式下的任务所花费system: CPU 时间( 纳米秒) 由 cgroup 在内核模式下的任务花费timestamp: 测量时的时间戳
两个调用都会返回包含一个或多个对象 CpuMetric 特定 cpu 任务的对象 :
cpuNanosSinceContainerStart: 系统内该组组获得的容器启动以来的CPU总时间(以纳秒计)timestamp: 测量时的时间戳
已计算 CPU 值 :
calculateUsage: 需要两次呼叫cpuacct.usage或者说cpuacct.stat并返回以 CPU 时间百分比计的计算使用量 :second time since container start - first time since container start / total time
安装
npm install cgroup-metrics
使用量
您可以使用每个度量的同步函数分别访问每个度量
内存计量
const cgroup = require('cgroup-metrics');
const memory = cgroup.memory();
const containerUsage = await memory.containerUsage();
console.log(containerUsage);
const containerUsagePercentage = await memory.containerUsagePercentage(containerUsage);
console.log(containerUsagePercentage);
CPU 计量
const cpu = cgroup.cpu();
/* Returns an object like:
* {
* cpuNanosSinceContainerStart: 120234,
* timestamp: 153686574
* }
* */
const cpuacct_usage = await cpu.usage();
console.log(`Total CPU time since start of container (ns): ${cpuacct_usage.cpuNanosSinceContainerStart}`);
/* Returns an object like:
* {
* user: {
* cpuNanosSinceContainerStart: 120234,
* timestamp: 153686574
* },
* system: {
* cpuNanosSinceContainerStart: 120234,
* timestamp: 153686574
* },
* }
* */
const cpuacct_stats = await cpu.stat();
console.log(`CPU user count object: ${cpuacct_stat.user}`);
console.log(`CPU system count object: ${cpuacct_stat.system}`);
const calculateUsage = await cpu.calculateUsage(cpuacct_usage1, cpuacct_usage2);
所有计量
或者你可以用这个功能 metrics 以获得所有参数的对象:
const metrics = await cgroup.metrics();
console.log(`Container usage: ${metrics.memory.containerUsage}`);
console.log(`Container usage percentage: ${metrics.memory.containerUsagePercentage}`);
console.log(`Total CPU time since start of container (ns): ${metrics.cpuacct.usagecpuNanosSinceContainerStart}`);
console.log(`CPU user count: ${metrics.cpuacct.stat.user}`);
console.log(`CPU system count: ${metrics.cpuacct.stat.system}`);
如果你打电话 metrics 有参数 flatten 设置为 true,它将返回一个平整的(1D) js 对象:
const metrics = await cgroup.metrics(true);
console.log(`Memory usage in the container: ${metrics["memory.containerUsage"]}`)
处理错误
如果没有容器运行或有读取文件路径的问题,函数调用会出错类似的东西:
Error: Error reading file /sys/fs/cgroup/memory/memory.stat, Message: ENOENT: no such file or directory, open '/sys/fs/cgroup/memory/memory.stat'
如果其中一个文件是空的, 它会返回这样的错误 :
Error: Error reading file /sys/fs/cgroup/memory/memory.stat, Message: File is empty
如果文件有错误, 它会返回这样的错误 :
Error: One or more metrics are malformed. containerUsage: 1234, limit: NaN
或者说:
Error reading file /sys/fs/cgroup/cpuacct/cpuacct.stat, Message: Cannot read property 'split' of undefined
捐款
欢迎捐款! 读取 贡献指南 更多信息.
许可证发放
这个项目根据Apache V2许可证获得许可. 见 自由主义 更多信息.