问题:Linux查看程序内存占用详情

问题:Linux查看程序内存占用详情

环境:

系统:centos 7.5
环境:

问题分析:

在linux下开发使用服务程序,经常需要查看某进程占用内存的详情,以便观察内存动态及是否泄露等情况。

解决步骤:

一、使用命令top 或者 top -p PID来进行观察,数据比较粗粒度,内存占比以百分比形式直观呈现。

二、使用命令 cat /proc/PID/status来查看,PID为当前程序或者服务的进程号。

1、查看服务或程序PID,以test服务为例,使用命令ps aux |grep test即可查看到。

2、观察proc中的内存信息,主要是以vmSize 虚拟内存大小;和vmRss 虚拟内存驻留大小来看对于内存的占用,其中vmRss可以直接理解为占用物理内存的大小。

proc信息中主要有VmSize|VmRSS|VmData|VmStk|VmExe|VmLib 这几指标,解释如下:
VmSize(KB):虚拟内存大小。整个进程使用虚拟内存大小,是VmLib, VmExe, VmData, 和 VmStk的总和。
VmRSS(KB):虚拟内存驻留集合大小。这是驻留在物理内存的一部分。它没有交换到硬盘。它包括代码,数据和栈。
VmData(KB):程序数据段的大小(所占虚拟内存的大小), 堆使用的虚拟内存。
VmStk(KB): 任务在用户态的栈的大小, 栈使用的虚拟内存
VmExe(KB):程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库
VmLib(KB) :被映像到任务的虚拟内存空间的库的大小

以test程序为例,使用下面命令可以轻松的查看test程序对于内存的占用

查看进程内存占用命令:
cat /proc/`ps -ef | grep test | grep -v grep | awk '{print $2}'`/status | grep -E 'VmSize|VmRSS|VmData|VmStk|VmExe|VmLib'

如果想要带上时间,命令如下:
cat /proc/`ps -ef | grep test | grep -v grep | awk '{print $2}'`/status | grep -E 'VmSize|VmRSS|VmData|VmStk|VmExe|VmLib' && date

如果想要长时间监控某个程序或者服务的内存占用,则可以用shell脚本来实现:

vim  mem_check.sh

#!/bin/sh
touch ./mem_check.log
echo "内存监测: " >> ./mem_check.log
while true
do
    cat /proc/`ps -ef | grep test | grep -v grep | awk '{print $2}'`/status | grep -E 'VmSize|VmRSS|VmData|VmStk|VmExe|VmLib' >> ./mem_check.log
    date >> ./mem_check.log
	echo " " >> ./mem_check.log 
    sleep 300
done


    原文作者:hi come
    原文地址: https://blog.csdn.net/Alger_magic/article/details/121718332
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞