如何衡量Linux中应用程序或进程的内存使用情况?
在博客文章《了解Linux上的内存使用情况》中,ps并不是一个准确的工具。
为什么ps是“错误的”根据您的看法,ps不会报告进程的实际内存使用情况。它真正要做的是显示如果只有一个进程在运行,每个进程将占用多少实际内存。当然,一台典型的Linux机器在任何给定时间都有几十个进程在运行,这意味着ps报告的VSZ和RSS数字几乎肯定是错误的。
(注:这里详细介绍了这个问题。)
如何衡量Linux中应用程序或进程的内存使用情况?
在博客文章《了解Linux上的内存使用情况》中,ps并不是一个准确的工具。
为什么ps是“错误的”根据您的看法,ps不会报告进程的实际内存使用情况。它真正要做的是显示如果只有一个进程在运行,每个进程将占用多少实际内存。当然,一台典型的Linux机器在任何给定时间都有几十个进程在运行,这意味着ps报告的VSZ和RSS数字几乎肯定是错误的。
(注:这里详细介绍了这个问题。)
当前回答
除了答案中列出的解决方案之外,您还可以使用Linux命令“top”。它提供了运行系统的动态实时视图,并给出了整个系统的CPU和内存使用情况,以及每个程序的百分比:
top
通过程序PID进行过滤:
top -p <PID>
按程序名过滤:
top | grep <PROCESS NAME>
“顶部”还提供一些字段,例如:
VIRT—虚拟映像(kb):任务使用的虚拟内存总量
RES——驻留大小(kb):任务使用的非交换物理内存;RES=代码+数据。
DATA——数据+堆栈大小(kb):除可执行代码外,专用于其他代码的物理内存量,也称为“数据驻留集”大小或DRS。
SHR—共享内存大小(kb):任务使用的共享内存量。它只是反映了可能与其他进程共享的内存。
此处参考。
其他回答
我建议您使用top。你可以在这个页面上找到关于它的一切。它能够为您的流程提供所有必要的KPI,还可以捕获到文件中。
除了答案中列出的解决方案之外,您还可以使用Linux命令“top”。它提供了运行系统的动态实时视图,并给出了整个系统的CPU和内存使用情况,以及每个程序的百分比:
top
通过程序PID进行过滤:
top -p <PID>
按程序名过滤:
top | grep <PROCESS NAME>
“顶部”还提供一些字段,例如:
VIRT—虚拟映像(kb):任务使用的虚拟内存总量
RES——驻留大小(kb):任务使用的非交换物理内存;RES=代码+数据。
DATA——数据+堆栈大小(kb):除可执行代码外,专用于其他代码的物理内存量,也称为“数据驻留集”大小或DRS。
SHR—共享内存大小(kb):任务使用的共享内存量。它只是反映了可能与其他进程共享的内存。
此处参考。
基于对相关问题的回答。
您可以使用SNMP获取网络上特定设备中进程的内存和CPU使用情况:)
要求:
运行进程的设备应安装并运行snmpsnmp应该配置为接受来自运行以下脚本的请求(可以在文件snmpd.conf中配置)您应该知道要监视的进程的进程ID(PID)
笔记:
HOST-ROURCES-MIB::hrSWRunPerfCPU是此进程消耗的系统CPU资源总量的秒数。请注意,在多处理器系统上,该值可能在实际(墙上时钟)时间的一厘秒内增加超过一厘秒。HOST-ROURCES-MIB::hrSWRunPerfMem是分配给此进程的实际系统内存总量。
过程监控脚本
echo "IP address: "
read ip
echo "Specfiy PID: "
read pid
echo "Interval in seconds: "
read interval
while [ 1 ]
do
date
snmpget -v2c -c public $ip HOST-RESOURCES-MIB::hrSWRunPerfCPU.$pid
snmpget -v2c -c public $ip HOST-RESOURCES-MIB::hrSWRunPerfMem.$pid
sleep $interval;
done
这是对工具和问题的极好总结:archive.org链接
我会引用它,这样更多的开发者会真正阅读它。
如果要分析整个系统的内存使用情况,或者要彻底分析一个应用程序的内存使用(而不仅仅是其堆使用情况),请使用exmap。对于整个系统分析,找到具有最高有效使用率的进程,它们实际上占用了最多的内存,找到具有最大可写使用率的过程,它们创建了最多的数据(因此可能泄漏或数据使用效率很低)。选择这样的应用程序并在第二个列表视图中分析其映射。有关详细信息,请参见exmap部分。还可以使用外部停止检查X资源的高使用率,特别是在X服务器的进程占用大量内存的情况下。有关详细信息,请参见外部停止部分。如果要检测泄漏,请使用valgrind或kmtrace。如果您想分析应用程序的堆(malloc等)使用情况,可以在memprof或kmtrace中运行它,分析应用程序并在函数调用树中搜索最大的分配。有关更多详细信息,请参见其章节。
如果您想要比使用Valgrind进行评测更快的东西,并且您的内核更旧,而且您不能使用smaps,那么一个带有显示进程驻留集选项的ps(使用ps-o rss,命令)可以让您快速、合理地了解所使用的非交换内存的实际数量。