目录

linux查看内存通用命令

命令1:free -h

命令2:cat /proc/PID/status

命令3:cat /proc/PID/maps

命令4:cat /proc/PID/smaps

对于内存的检测提供两个脚本方案:

对全部进程进行内存统计

对特定模块进行内存统计


linux查看内存通用命令

命令1:free -h

输出结果如下:

描述信息分为两行,Mem(内存相关描述)和Swap(交换分区相关描述)。通常在嵌入式上不使用Swap分区,所以不进行论述

项目名

数值

意义

Total

1.2G

系统物理内存总量 1.2G

Used

769M

表示总计分配给缓存(包含buffers与cach)使用的大小为769M,但其中可能有部分缓存并未实际使用。

Free

347M

系统剩余总量347M

Shared

12M

共享内存12M

Buff/cache

137M

统称缓冲区137M,区别如下:

写如磁盘时,先保存到磁盘缓冲区(buffer),然后再写入到磁盘。

磁盘读出后,暂留在缓冲区(cache),为后续程序的使用做准备。

available

405M

Free是指真正未使用的物理内存量,available是从程序角度可以看到的可用的内存数量。程序角度认为,未使用的内存和缓冲区都可以用来使用,所以理论上available=free+buff+cache,但这是一个理想的计算方法。实际上会有一些偏差

通常,需要使用free -h命令对整体内存进行判断。如果free一直在下降或used一直在上升则认为内存存在泄漏。

命令2:cat /proc/PID/status

输出结果如下:

Status下会有很多进程描述信息,但对于内存仅需要关注红框中内容即可

项目名

数值

意义

VmPeak

399256kB

是当前进程使用的虚拟内存的峰值

VmSize

333860kB

是当前进程实时的虚拟内存使用情况

VmHWM

7628kB

是当前进程使用的物理内存的峰值

VmRSS

7628kB

是当前进程实时的物理内存使用情况

RssAnon

4692kB

当前进程使用的匿名内存大小

RssFile

2936kB

当前进程文件使用内存大小

RssShmem

0kB

当前进程共享内存大小

VmData

67056kB

是当前进程数据段的大小

VmStk

132kB

是当前进程堆栈段的大小

VmExe

8kB

是当前进程代码段的大小

VmLib

4472kB

是当前进程使用的LIB库的大小

针对内存问题的检证,首先要确认VmSize和VmRSS的变化情况确认来是否有内存泄漏。如果出现泄漏则需要观察其他项目来判断是哪里出现了问题。

命令3:cat /proc/PID/maps

首先,要理解在Linux上,系统会对每个进行分配8G(默认设定)的虚拟空间。本命令是对当前进程的虚拟内存的具体分配结果(简略信息)。

输出的结果中会包含栈信息,堆信息,已经使用了哪些库。如下图。

命令4:cat /proc/PID/smaps

本命令是对命令3 的详细描述,会对每一具体分配段进行详细的数据展开,如下图

对于每一段的数据都会有上图所示信息,但仅需要关注红框部分信息即可,有四个关键字段 Rss 和Pss ,shared 和Private

项目名

数值

意义

Rss

8kB

是进程的物理内存占用,包括进程本身和所有链接库,RSS = private + share

Pss

8kB

链接库的共享内存平摊计算后的使用内存,(比如一个动态库有5个人引用,则将其代码段和共享内存除于5),PSS = private + share

Shared_Clean

0kB

和其他进程共享的未改写页面

Shared_Dirty

0kB

和其他进程共享的已改写页面

Private_Clean

0kB

未改写的私有页面页面

Private_Dirty

8kB

已改写的私有页面页面

其中: private = private_clean + private_dirty: 这个数据一般能够比较准确反映一个进程内部占用的内存,在内存优化的时候使用这个作为参考值比较合理,进程的物理内存占用就是smaps中所有的private的相加(链接的动态库的也要统计进去)。

仅仅你自己使用的库 是属于Private的,如果别人也用这个库 则是属于Shared。当然你的代码如果链接给别人,也是属于Shared。

所以想要得到确定的内存使用量,将/proc/PID/smap中的所有Private_Clean和Private_Dirty累加起来,是很好的解决方案

对于内存的检测提供两个脚本方案:

对全部进程进行内存统计

检测全部进程内存量的脚本,(输出时通过 ] 符号进行分割,方便用excel进行分列数据统计)

#!/bin/basha=1echo "8 > /proc/sys/kernel/printk"
while [ $a -eq 1 ];doecho "########################"
echo `date "+%Y-%m-%d %H:%M:%S"`echo "free"
free -hfor pid in `ls -1 /proc/ | egrep "[[:digit:]]"`;
do if [ -f "/proc/$pid/status" ]; then proc_name=`grep '^Name' /proc/$pid/status | awk '{print $2}'`; mem_VmPeak=`grep '^VmPeak' /proc/$pid/status | awk '{print $2}'`; mem_VmRSS=`grep '^VmRSS' /proc/$pid/status | awk '{print $2}'`;mem_VmSize=`grep '^VmSize' /proc/$pid/status | awk '{print $2}'`;mem_VmData=`grep '^VmData' /proc/$pid/status | awk '{print $2}'`;if [[ $mem_VmPeak != "" ]]; then echo "]$proc_name] VmPeak : ]$mem_VmPeak] kB VmRSS : ]$mem_VmRSS] kB VmSize : ]$mem_VmSize] kB VmData : ]$mem_VmData] kB";fifidoneecho "########################"sleep 30sdone

对特定模块进行内存统计

当确认是某一个模块的问题时,在通过下面的脚本对单独的模块进行内存统计

(下面的脚本中替换loggmr为想调查的进程名即可)

#!/bin/bash
while [ 1 -eq 1 ];do
echo "########################"
echo `date "+%Y-%m-%d %H:%M:%S"`
free
pid=$(ps -aux |grep logmgr|head -n 1|awk '{print $2}')
echo "++++++++++++++++++++"
echo RssSum_SUM:`cat /proc/$pid/smaps |grep Rss|awk 'BEGIN{sum=0;}{sum=sum+$2;}END{print sum}'`KB
echo PssSum_SUM:`cat /proc/$pid/smaps |grep Pss|awk 'BEGIN{sum=0;}{sum=sum+$2;}END{print sum}'`KB
echo Shared_Clean_SUM:`cat /proc/$pid/smaps |grep Shared_Clean|awk 'BEGIN{sum=0;}{sum=sum+$2;}END{print sum}'`KB
echo Shared_Dirty_SUM:`cat /proc/$pid/smaps |grep Shared_Dirty|awk 'BEGIN{sum=0;}{sum=sum+$2;}END{print sum}'`KB
echo Private_Clean_SUM:`cat /proc/$pid/smaps |grep Private_Clean|awk 'BEGIN{sum=0;}{sum=sum+$2;}END{print sum}'`KB
echo Private_Dirty_SUM:`cat /proc/$pid/smaps |grep Private_Dirty|awk 'BEGIN{sum=0;}{sum=sum+$2;}END{print sum}'`KB
echo "-----------------------"
cat /proc/$pid/statussleep 30s
done

Linux内存查看通用方法相关推荐

  1. linux cpu uuid 查看,Linux下查看UUID方法介绍

    Linux下查看UUID方法介绍. 1. sudo blkid /dev/sda1: UUID="9ADAAB4DDAAB250B" TYPE="ntfs" / ...

  2. Linux内存泄漏检测方法总结

    Linux内存泄漏检测方法总结 一.mtrace分析内存泄露 mtrace原理 设置日志生成路径 测试实例 日志 泄露分析 使用addr2line工具定位源码位置 使用mtrace工具分析日志信息 二 ...

  3. linux日志查看常见方法

    linux日志查看常见方法 作为一个常年的码农,常年与日志打交道,我自己常用的日志就有各种linux访问日志,php错误日志,nginx访问日志,mysql慢日志- 那么日志是如何查看与分析呢?这里的 ...

  4. Linux下查看网关方法

    Linux下查看网关方法:1.route -n2.ip route show3.traceroute www.prudentwoo.com -s 100 [第一行就是自己的网关]4.netstat - ...

  5. Linux下查看网关方法:

    Linux下查看网关方法: route -n ip route show traceroute www.prudentwoo.com -s 100 第一行就是自己的默认网关 netstat -r ca ...

  6. linux内存泄漏通用排查方法

    一.   概述 Linux下经常遇到内存泄漏的问题,尤其对C/C++开发人员来说是一个亘古不变的话题,现在介绍解决Linux内存泄漏问题的方法层出不穷,让人眼花缭乱,但是作为开发人员应该从本质上了解为 ...

  7. Linux内存手动释放方法

    Linux服务器内存释放在有些人看起来好像可以提高不少的效率,但是它实际的工作效果并不是很理想,这里我们说一下如何进行这份工作,帮助我们更好的去理解Linux系统的工作方式. 大众释放内存方法 1. ...

  8. linux电脑内存查看工具,Linux内存查看工具---Smem

    物理内存不足对Linux桌面系统和服务器系统的性能影响都很大.当你的计算机变慢时,要做的第一件事就是释放内存.尤其是在多用户环境以及执行关键任务的服务器环境下,内存消耗会变得更加关键,因为多个用户和应 ...

  9. linux 内存查看 kvm,Linux虚拟化KVM-Qemu分析(五)之内存虚拟化

    原标题:Linux虚拟化KVM-Qemu分析(五)之内存虚拟化 背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousa ...

  10. linux查看内核启动信息log,Linux内核查看log方法

    1 printk()打印内核消息. 2 管理内核内存的daemon(守护进程) Linux系统当中最流行的日志记录器是Sysklogd,Sysklogd 日志记录器由两个守护进程(klogd sysl ...

最新文章

  1. php留言板只能留言一次,php如何实现留言板修改留言
  2. 实用线性代数和凸优化 Convex Optimization
  3. MySql第几行到第几行语句
  4. 模拟IE登录一个需要(windows身份)验证的网站
  5. mysql 聚簇索引和非聚簇索引_MySQL学习之——索引
  6. 一个大胖鲸-Docker(2):简单的几个docker命令
  7. 使用python连接kafka
  8. 支付宝上线小程序,外国人来中国旅游再也不用烦恼了
  9. python函数isdisjoint方法_Python中的isdisjoint()函数
  10. 图片横向滚动,两边有按钮控制
  11. 深入浅出SCSI子系统(五)SCSI设备探测
  12. 单片机第1季:零基础学51单片机-蜂鸣器介绍
  13. 迅雷调用Potplayer边下边播
  14. 人工智能基础——知识的表示方法,产生式表示法
  15. virtualbox安装androidx86进入console控制台,不能进入启动界面,卡死在detecting android-x86 found at /dev/sda1
  16. Allegro Cadence 视频教程+信号完整性
  17. python京东自动签到_利用python Selenium实现自动登陆京东签到领金币功能
  18. 计算机软件过期黑屏怎么办,Adobe flashplayer过期怎么办
  19. 二进制“<”:“const _Ty”不定义该运算符或到预定义运算符可接收的类型的转换
  20. 周志华机器学习--绪论

热门文章

  1. 全球免费开放电子图书馆
  2. 第一章、银行会计的基本原理和基本核算方法
  3. multisim常用d触发器_怎么在multisim找D触发器
  4. 开源盛世:谈谈开源代码的使用与安全风险
  5. UE4 使用蓝图进行编辑器扩展
  6. ExactScan pro for mac(万能扫描仪整合工具)
  7. 串口通信linux单片机,Linux与单片机串口通信
  8. 世嘉MD游戏开发【二】:Hello World
  9. 《深度学习》之 VGG卷积神经网络 原理 详解
  10. 达梦数据库SQL语句执行