0 引言
最近在分析安卓程序上的monkey测试日志时发现,需要了解下Linux进程资源占用情况及其查看方法。之前在windows上有ProcessExplorer可以直接查看,在Linux下就没这么方便了,只能通过命令行来查看。
所以本文的目标就在于:在你知道你要分析的进程名之后,通过命令行工具读取进程的PID、CPU占用情况、内存占用情况、已打开文件描述符、网络情况。
1 找到进程PID
目前使用比较经典的命令是top
。比如我想找player关键词的进程,可以使用:
# top | grep player
2319 u0_a127 20 0 22% S 450 3254600K 1162720K ta com.real.simpleplayer
2134 u0_a14 20 0 0% S 13 1410516K 37624K bg com.huawei.hwvplayer.youku
这样就可以很简单找到你需要的进程PID。当然也可以使用其他命令行工具,比如atop、Htop等等。(参考文献中有很多,有兴趣可以查看下)
2 给定进程资源占用情况
这里的资源包括:CPU、内存、打开句柄、内部线程。(上面提到的工具都有对应的数据列,这里仅提供最原始的查阅方式。)
linux的新创建进程会自动创建/proc/pid
目录,其中包含以下部分:
目录名 | 功能说明 |
---|---|
cmdline | 包含了用于启动进程的命令行 |
cwd | 包含了当前进程工作目录的链接 |
environ | 包含了可用进程环境变量的列表 |
exe | 包含了正在进程中运行的可执行文件的链接 |
fd | 包含了进程打开的每一个文件的链接 |
maps | 与进程相关的内存映射信息 |
mem | 包含了进程在内存中的内容 |
stat | 包含了进程的状态信息 |
statm | 包含了进程的内存使用信息 |
limits | 存储了进程的软限制,硬限制等信息 |
root | 指向进程根目录的软链接 |
self | 链接到当前正在运行的进程 |
task | 包含当前进程所有子线程pid |
说明一点,我使用的是Huawei Mate9的adb shell。
例如以下是cat limits
的输出结果:
# cat limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 11590 11590 processes
Max open files