我在基于 ARM 的嵌入式设备上有一个 Linux 内核 2.6.30,我必须在设备上进行一些内核内存使用情况分析。
我正在考虑在执行 wifi 打开/关闭等操作时监视各种内核线程和模块上的 ps 输出。
你能建议我吗:
我需要监视哪些线程?如何监控内核模块内存使用情况?
答案1
有多种方法可以监控 Linux 系统中的内存使用情况。有些可能可用也可能不可用,具体取决于
- 您正在运行什么版本
- 内核是如何配置的
- 根文件系统中包含哪些用户空间工具
由于 Linux 通常是虚拟内存系统,因此某些统计数据可能会产生误导和/或不准确。挖掘并理解每个统计数据的含义非常重要。
话虽如此,我通常通过运行 vmstat 来监控内存使用情况,以了解总内存使用情况:
# vmstat -s
127168 total memory
44072 used memory
33296 active memory
2164 inactive memory
83096 free memory
0 buffer memory
20468 swap cache
0 total swap
0 used swap
0 free swap
582750 non-nice user cpu ticks
0 nice user cpu ticks
160883 system cpu ticks
7448748 idle cpu ticks
0 IO-wait cpu ticks
16066 IRQ cpu ticks
18249 softirq cpu ticks
0 stolen cpu ticks
0 pages paged in
0 pages paged out
0 pages swapped in
0 pages swapped out
15079537 interrupts
28629740 CPU context switches
1344249586 boot time
25532 forks
“free”还会为您提供内存使用情况的鸟瞰图。如果我发现任何意外情况,我将通过检查 procfs 中的文件来查找可疑进程。值得一看的好文件是
/proc/PID/地图- 这列出了进程当前映射的所有内存
/proc/PID/smaps- 提供有关有多少内存驻留/共享/脏/等的更多详细信息...该文件可能很冗长,但可以编写Python脚本来生成更有意义的数据