如何衡量Linux中应用程序或进程的内存使用情况?
在博客文章《了解Linux上的内存使用情况》中,ps并不是一个准确的工具。
为什么ps是“错误的”根据您的看法,ps不会报告进程的实际内存使用情况。它真正要做的是显示如果只有一个进程在运行,每个进程将占用多少实际内存。当然,一台典型的Linux机器在任何给定时间都有几十个进程在运行,这意味着ps报告的VSZ和RSS数字几乎肯定是错误的。
(注:这里详细介绍了这个问题。)
如何衡量Linux中应用程序或进程的内存使用情况?
在博客文章《了解Linux上的内存使用情况》中,ps并不是一个准确的工具。
为什么ps是“错误的”根据您的看法,ps不会报告进程的实际内存使用情况。它真正要做的是显示如果只有一个进程在运行,每个进程将占用多少实际内存。当然,一台典型的Linux机器在任何给定时间都有几十个进程在运行,这意味着ps报告的VSZ和RSS数字几乎肯定是错误的。
(注:这里详细介绍了这个问题。)
当前回答
注意:只有当内存消耗增加时,此功能才能100%正常工作
如果您想通过给定的进程(或一组已处理的共享公用名称,例如google chrome)监控内存使用情况,可以使用我的bash脚本:
while true; do ps aux | awk ‚{print $5, $11}’ | grep chrome | sort -n > /tmp/a.txt; sleep 1; diff /tmp/{b,a}.txt; mv /tmp/{a,b}.txt; done;
这将持续查找更改并打印它们。
其他回答
在最新版本的Linux中,使用smaps子系统。例如,对于PID为1234的进程:
cat /proc/1234/smaps
它会确切地告诉你当时它使用了多少内存。更重要的是,它将把内存分为私有和共享,这样你就可以知道你的程序实例使用了多少内存,而不包括程序的多个实例之间共享的内存。
去找Valgrind。让它运行你的程序,它会告诉你它的内存使用情况。
这只适用于程序运行一段时间并停止的情况。我不知道Valgrind是否能够控制一个已经运行的进程,或者不应该停止的进程,比如守护进程。
查看此shell脚本以检查Linux中应用程序的内存使用情况。
它也可以在GitHub上使用,并且没有粘贴和bc。
以下命令行将以MB为单位显示在Linux机器上运行的各种进程所使用的总内存:
ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | awk '{total=total + $1} END {print total}'
基于对相关问题的回答。
您可以使用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