如何查看应用程序使用的原始内存数据?就像,假设我有一个文件名something.sh
。现在我运行命令./something.sh
,然后我想查看它在 ram 中访问的所有数据以及它在我的文件系统中访问的所有文件、网络数据或它使用的连接。可能是该应用程序使用的内存的十六进制转储。我可以在 ubuntu 中这样做吗?
答案1
如何查看应用程序使用的原始内存数据...
一旦你获得了进程的 PID(使用ps(1)
或者pidof(8)
例如),您可以使用/proc/PID/maps
和访问其虚拟地址空间中的数据/proc/PID/mem
。吉尔斯在这里写了一个非常详细的答案。
...以及它在我的文件系统、网络数据或连接中访问的所有文件
lsof
就可以做到这一点。netstat
可能更适合与网络相关的描述符。例如 :
$ netstat -tln # TCP connections, listening, don't resolve names.
$ netstat -uln # UDP endpoints, listening, don't resolve names.
$ netstat -tuan # TCP and UDP, all sorts, don't resolve names.
$ lsof -p PID # "Files" opened by process PID.
笔记:netstat
的-p
开关将允许您打印与每行相关的进程(至少是您的进程)。要选择特定进程,您可以简单地使用grep
:
$ netstat -tlnp | grep skype # TCP, listening, don't resolve (Skype).
有关这些工具的更多信息:netstat(8)
和lsof(8)
。也可以看看:proc(5)
(以及其他答案中提到的工具)。
答案2
部分答案:
您可以使用以下命令实时查看它访问的文件
strace something.sh
具体来说,它显示了该进程进行的每个系统调用。
答案3
您可以通过虚拟/proc
文件系统(仅在 Linux 下)获取此信息。
尝试在进程运行时运行此命令(将 替换<pid>
为观察到的进程的 PID):
grep 'VmSize' /proc/<pid>/status
请注意,您必须具有进程的读取权限才能获取这些信息(如果您不拥有它,则无法访问它)!
如果您想了解 给出的所有信息/proc/<pid>/status
,只需执行以下操作:
cat /proc/self/status
答案4
如果您只对最少的信息感兴趣,请尝试在终端中输入 sudo gnome-system-monitor。单击进程。