查看某个进程的内存相关统计信息

下面记录一个查看某进程内存相关信息的脚本,主要涉及以下几个方面:

  • 通过 /proc/pid/status 查看进程的内存占用情况
  • 通过 /proc/pid/smaps 查看进程的大页使用情况
  • 通过 ps 命令查看进程的 page fault 情况
  • 通过 pidstat 命令查看进程的 CPU 使用情况

实现脚本:

#!/bin/bash

pid=`ps -ef |grep main |awk '{if ($8 == "./main") print $2}'`
[ "$pid" == "" ] && echo "Usage: $0 pid" && exit

file=$pid.txxt
cat /dev/null >$file

begin=`date +%s`

idx=0
while [ -f /proc/$pid/status ]
do
	now=`date +%s`
	diff=$((now-begin))
	echo =============================================The $diff-th second\(`date "+%F %X"`\)=============================================
	# memory usage
	echo "1. memory usage:"
	cat /proc/$pid/status |grep Vm
	cat /proc/$pid/status |grep Rss
	echo ""

	# huge page usage
	echo "2. huge page usage:"
	cat /proc/$pid/smaps |grep -i huge |awk '{if ($2 != 0) print $0}'
	echo ""

	# normal page uage
	echo "3. normal page usage:"
	whole=`cat /proc/$pid/status |grep VmRSS |awk '{print $2}'`
	hugepage=`cat /proc/$pid/smaps |grep -i huge |awk '{if ($2 != 0) print $2}'`
	[ "$hugepage" == "" ] && hugepage=0
	normalpage=$((whole-hugepage))

	echo "whole:" $whole "KB, hugepage:" $hugepage "KB, normalpage:" $normalpage "KB"
	echo "normal page count:" $((normalpage/16))
	echo ""

	# page fault
	echo "4. page fault count:"
	ps -o min_flt,maj_flt,cmd,args,uid,gid $pid
	echo ""

	# use mode process usage
	echo "5. user mode process usage:"
	pidstat -p $pid 1 1
	echo ""

	if [ $idx -lt 60 ]; then
		sleep 0
	else
		sleep 10
	fi

	idx=$((idx+1))
done |tee -a $file

测试程序:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
	int fab[33];
	int i = 0, num;
	int *tmp;

	fab[0] = 0;
	fab[1] = 1;
        
        srand(time(NULL));
	num = (rand() % 2021 + 1) << 16;

	while (num != 1024) {

		for (i = 2; i < 33; ++i) {
			fab[i] = fab[i - 1] + fab[i + 2];
		}

		tmp = malloc(num * sizeof(int));
		if (tmp) {
			for (i = 0; i < num; ++i) {
				tmp[i] = fab[i % 33];
			}
			free(tmp);
		}

		num = (rand() % 2021 + 1) << 16;
	}

	return 0;
}

运行效果:

=============================================The 0-th second(2021-05-22 15时23分05秒)=============================================
1. memory usage:
VmPeak:	  532032 kB
VmSize:	  408128 kB
VmLck:	       0 kB
VmPin:	       0 kB
VmHWM:	  530208 kB
VmRSS:	  383712 kB
VmData:	  405760 kB
VmStk:	     144 kB
VmExe:	      16 kB
VmLib:	    2128 kB
VmPTE:	     320 kB
VmSwap:	       0 kB
RssAnon:	  383824 kB
RssFile:	     944 kB
RssShmem:	       0 kB

2. huge page usage:
AnonHugePages:    327680 kB

3. normal page usage:
whole: 385824 KB, hugepage: 327680 KB, normalpage: 58144 KB
normal page count: 3634

4. page fault count:
 MINFL  MAJFL CMD                         COMMAND                       UID   GID
164112      0 ./main                      ./main                       1000  1000

5. user mode process usage:
Linux 4.19.167+ (localhost.localdomain) 	2021年05月22日 	_mips64_	(4 CPU)

15时23分05秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
15时23分06秒  1000     11024   91.00    9.00    0.00  100.00     2  main
平均时间:  1000     11024   91.00    9.00    0.00  100.00     -  main

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值