- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 Node.js 为我的家庭服务器 à la Nagios 和 Munin 创建一个监控 API。在这样做的过程中,我发现我想要比 os.freemem() 能给我的更详细的内存信息。
我真正喜欢做的是将类似 cat/proc/meminfo
的内容转换为 JSON。
MemTotal: 1017948 kB
MemFree: 122180 kB
Buffers: 151336 kB
Cached: 546844 kB
SwapCached: 0 kB
Active: 583256 kB
Inactive: 215544 kB
Active(anon): 100784 kB
Inactive(anon): 276 kB
Active(file): 482472 kB
Inactive(file): 215268 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 100620 kB
Mapped: 13452 kB
Shmem: 440 kB
Slab: 81232 kB
SReclaimable: 72388 kB
SUnreclaim: 8844 kB
KernelStack: 664 kB
PageTables: 4244 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 508972 kB
Committed_AS: 148780 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 4136 kB
VmallocChunk: 34359725048 kB
HardwareCorrupted: 0 kB
AnonHugePages: 45056 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 30708 kB
DirectMap2M: 1017856 kB
在这种情况下,我得到的是:
var fs = require('fs');
function info() {
var data = fs.readFileSync('/proc/meminfo').toString();
var lines = data.split(/\n/g).map(function(line){
return line.split(':');
});
return lines;
}
console.log(info());
这会产生一个二维数组,如下所示:
[ [ 'MemTotal', ' 1017948 kB' ],
[ 'MemFree', ' 120612 kB' ],
[ 'Buffers', ' 151492 kB' ],
[ 'Cached', ' 547424 kB' ],
[ 'SwapCached', ' 0 kB' ],
[ 'Active', ' 585824 kB' ],
[ 'Inactive', ' 215456 kB' ],
[ 'Active(anon)', ' 102528 kB' ],
[ 'Inactive(anon)', ' 268 kB' ],
[ 'Active(file)', ' 483296 kB' ],
[ 'Inactive(file)', ' 215188 kB' ],
[ 'Unevictable', ' 0 kB' ],
[ 'Mlocked', ' 0 kB' ],
[ 'SwapTotal', ' 0 kB' ],
[ 'SwapFree', ' 0 kB' ],
[ 'Dirty', ' 88 kB' ],
[ 'Writeback', ' 0 kB' ],
[ 'AnonPages', ' 102412 kB' ],
[ 'Mapped', ' 13416 kB' ],
[ 'Shmem', ' 432 kB' ],
[ 'Slab', ' 81224 kB' ],
[ 'SReclaimable', ' 72408 kB' ],
[ 'SUnreclaim', ' 8816 kB' ],
[ 'KernelStack', ' 648 kB' ],
[ 'PageTables', ' 3632 kB' ],
[ 'NFS_Unstable', ' 0 kB' ],
[ 'Bounce', ' 0 kB' ],
[ 'WritebackTmp', ' 0 kB' ],
[ 'CommitLimit', ' 508972 kB' ],
[ 'Committed_AS', ' 141360 kB' ],
[ 'VmallocTotal', ' 34359738367 kB' ],
[ 'VmallocUsed', ' 4136 kB' ],
[ 'VmallocChunk', ' 34359725048 kB' ],
[ 'HardwareCorrupted', ' 0 kB' ],
[ 'AnonHugePages', ' 45056 kB' ],
[ 'HugePages_Total', ' 0' ],
[ 'HugePages_Free', ' 0' ],
[ 'HugePages_Rsvd', ' 0' ],
[ 'HugePages_Surp', ' 0' ],
[ 'Hugepagesize', ' 2048 kB' ],
[ 'DirectMap4k', ' 30708 kB' ],
[ 'DirectMap2M', ' 1017856 kB' ],
[ '' ] ]
我可以想象一个双重嵌套的 for 循环遍历 info()
的返回并将元素分配给一个新对象,但这似乎不够优雅。
将 /proc/meminfo
的内容转换为 JSON 的更好方法是什么?
最佳答案
我已经稍微修改了您的代码以返回没有填充的普通对象。此功能未经测试(我在 Windows 机器上!),但有点像这样可以工作:
function info() {
var info = {};
var data = fs.readFileSync('/proc/meminfo').toString();
data.split(/\n/g).forEach(function(line){
line = line.split(':');
// Ignore invalid lines, if any
if (line.length < 2) {
return;
}
// Remove parseInt call to make all values strings
info[line[0]] = parseInt(line[1].trim(), 10);
});
return info;
}
预期结果如下:
{
'MemTotal': 1017948,
...
}
关于javascript - 使用 Node.js 将/proc/meminfo 格式化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23588672/
我想获取每个 NUMA 节点的“可用内存”量。当处理一整台机器时,通常会像free一样解析/proc/meminfo(所需的数字是MemFree + Buffers + Cached)。还存在/sys
如何编写自己的代码来使用“meminfo”系统服务?或者如何添加自己的系统服务?我的目标是在应用程序运行时自动采样内存使用数据,并分析数据事后分析。 最佳答案 How can I write my o
我一直在使用 scanf 从/proc/meminfo 中提取 3 个值,如下所示: fscanf (info, "MemTotal: %*d kB MemFree: %d kB Buffers:
如果系统中存在内存泄漏,定期 cat/proc/meminfo 获取提示是否是个好主意。 如果是这样,鉴于可疑的内存泄漏发生在内核模块中,我应该关注哪个指标: > cat /proc/meminfo
当我在 android 4.2 上运行“adb shell dumpsys meminfo”时,我得到的结果如下 Shared Pr
我试图了解 meminfo 如何跟踪内存。这是我在看的: MemTotal: 341596 kB MemFree: 147288 kB Buffers:
我可以理解 /proc/meminfo 中包含的大部分信息,例如总内存、缓冲区、缓存等。你能告诉我下面列出的那些不太明显的信息是什么意思吗? 匿名页面 映射 楼板 NFS_不稳定 弹跳 Vmalloc
我要感谢您帮助我解决相关问题。我知道如果我做一个 cat/proc/meminfo 它只会以 kb 显示,我怎么能以 mb 显示?我真的很想为此使用 cat 或 awk。 最佳答案 这将转换任何 kB
DirectMap4K/DirectMap2M 在/proc/meminfo 的输出中表示什么? 最佳答案 它们给出了由 x86 TLB 映射到该页面大小的内存量. 关于linux - meminfo
在 Linux 中,我希望我的用户空间程序提供有关其内部计数器的信息,使用类似于/proc/meminfo 的方法:用户只需读取文件即可获取信息。 我正在考虑使用常规文件/tmp/my_counter
我试图找出可用的缓存和缓冲区的数量,并将其计为可用内存(列在 free 和/proc/meminfo 中)。如果我 drop_caches 我会得到一些免费的,但它是怎么做到的?我在哪里可以找到它的源
我想记录当前正在运行的实例的内存总量(或者:当前进程使用的内存和当前进程可用的内存),并使用/proc/meminfo: info = { i.split()[0].rstrip(":"):
关于“adb shell dumpsys meminfo”的输出有很多问题,比如这个: adb shell dumpsys meminfo - What is the meaning of each
我正在进入 kb 但我想要 ram 以 mb 我如何获得它因为我正在获得“MemTotal:855000kb”但我想要 855mb 如何获得 ram 以 Mb 以及如何只获得数字不想要 Memtota
在使用Android adb shell时,我对procrank和dumpsys meminfo之间的区别感到困惑。我的应用程序的Pss,由command-procrank报告,总是高于dumpsys
我在 bash 中有以下脚本: ssh user@1.1.1.1 "echo 'start' mkdir -p /home/user/out cp /tmp/big_file /home/
那么 meminfo 是表示有 X 空闲内存的最佳方式吗?我问这个问题是因为我的公司声明这不是表示可用内存的准确方法。事实上,它是 memfree、cached、buffers、slab 的总和,如果
Slab — 内核用来缓存数据结构供其自身使用的内存总量(以千字节为单位)。 我的问题是,如果任何进程创建自己的 slab,那么这个 slab 内存会转到 slab 或进程的 PSS 部分吗? kma
例如,我有: % grep '^Mapped:' /proc/meminfo Mapped: 121868 kB 我想生成这样的东西: PID Mapped
我正在查看下面给出的命令输出 adb shell dumpsys meminfo com.imangi.templerun 但是,我无法正确理解这一点。 谁能帮我理解一下? 最佳答案 由于不同版本的“
我是一名优秀的程序员,十分优秀!