如何在运行时监控进程的资源使用情况(时间、内存)?

Posted

技术标签:

【中文标题】如何在运行时监控进程的资源使用情况(时间、内存)?【英文标题】:How to monitor a process's resource usage(time, memory) at run-time? 【发布时间】:2011-07-04 05:28:46 【问题描述】:

我正在尝试在运行时监控进程的资源使用情况(时间、内存、系统调用),Windows 中是否有 api,例如 ptrace、linux 中的 setrlimit? 谢谢

【问题讨论】:

你能在编译时监控资源使用情况吗? :P 您正在寻找的是称为分析器的工具。在网络上搜索 C++/C# 分析器。 感谢您的建议。我正在尝试在windows上编写一个简单的在线判断,它可以编译用户的代码并在有限的时间和内存中运行程序,如spoj.pl。所以我需要一些建议关于我应该使用什么 winapis。 解释更多你需要的东西。听起来您想限制允许进程使用多少内存和多少 CPU 时间。是这样吗?请定义内存的含义,因为有许多不同的指标。 【参考方案1】:

根据您在 C/C++(或通过 P/Invoke 的 C#)中想要的内容,有很多 API:

例如,开始寻找,

进程 CPU 时间(UM/KM): http://msdn.microsoft.com/en-us/library/ms683223(VS.85).aspx

进程虚拟机(工作集): http://msdn.microsoft.com/en-us/library/ms683226(v=VS.85).aspx

进程 I/O 数据: http://msdn.microsoft.com/en-us/library/ms683218(v=VS.85).aspx

您可以尝试这些来开始。

【讨论】:

【参考方案2】:

有几种方法。首先,您将希望将该进程作为低完整性进程运行。这类似于 Internet Explorer 的运行方式;此类进程与其他进程、注册表和文件系统(选定的低完整性目录除外)是隔离的。

其次,您可以控制可执行文件。您应该将允许使用的 DLL 和函数列入白名单。 CreateProcess 的变体太多,无法列入黑名单。这甚至可能需要重建 CRT 以消除危险功能。

沙盒 C# 代码更容易一些。您显然必须将其限制为安全代码。 PEVerify 可以提供帮助。

【讨论】:

【参考方案3】:

您可以使用 ProcMon、Process Explorer、ProcessMonitor 和 Performance monitor 等系统工具进行此类分析。跟踪系统调用实际上是一项艰巨的工作,一个应用程序将进行数百个系统调用。我认为您必须使用诸如 Inter VTune Analyzer 之类的工具来进行此类深度分析。

【讨论】:

以上是关于如何在运行时监控进程的资源使用情况(时间、内存)?的主要内容,如果未能解决你的问题,请参考以下文章

Linux下如何创建和监控子进程? [关闭]

技术分享| 如何使用Prometheus实现系统进程监控

技术分享| 如何使用Prometheus实现系统进程监控

监控自身进程的内存使用情况

Docker监控容器资源的占用情况

linux测试某进程占用oicpu内存的使用情况