这篇博客主要介绍 linux 环境下,查看内存占用的两种方式:使用 ps,top等命令;查看/proc/[pid]/下的文件。文章简要介绍了命令的使用方法与一些参数意义,同时对/proc/[pid]/下的文件内容进行了一些详细的介绍。文章内容来自google和自我总结,如有不当之处,欢迎批评指正。

查看Linux内存的方法

linux 下面查看内存有多种渠道,比如通过命令 ps ,top,free, pmap 等,或者通过/proc系统。一般情况下,ps,top,pmap,free可以满足要求,如果需要比较详细和精确地知道整机内存或者某个进程内存的使用情况,可以通过/proc 系统。

使用命令

free : 显示系统可用内存以及已经使用的内存的信息

ps: 查看进程信息,静态,即当前状态

top: 查看进程信息,动态

pstree: 查看进程树

pmap: 根据进程ID查看进程信息

ps vs topps命令–提供系统过去信息的一次性快照,也就是说ps命令能够查看刚刚系统的进程信息。top命令反应的是系统进程动态信息,默认10s更新一次。ps和top都是从/proc目录下读取进程的状态信息,内核把当前系统进程的各种有用信息都放在这个伪目录下。

常见ps命令:

ps -aux: 查看系统所有进程

ps -l: 进查看自己的bash相关进程

top 命令详解,请参考

基本命令:按键盘数字“1”,可监控每个逻辑CPU的状况:键盘“b”(打开/关闭加亮效果)键盘“x”(打开/关闭排序列的加亮效果)”shift + >”或”shift +

具体使用方法,可以使用 man [cmd] 查看。

相关参数说明

VSZ & VIRT进程使用的虚拟内存值总量,包括所有代码,数据,共享库已经被swApped out的。VIRT = SWAP + RES。VSZ来自ps命令, VIRT来自top命令,二者均表示进程占用的虚拟内存大小。假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量

RES & RSS进程当前使用的内存大小,但不包括swap out. RES = CODE +DATA。包含其他进程的共享RES 来自 top 命令, RSS 来自 ps 命令,两者在表示意义上没有区别,都是从 /cat/proc/[pid]/stat 文件中读取的信息。如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反关于库占用内存的情况,它只统计加载的库文件所占内存大小

CODE

可执行代码占用的物理内存大小

DATA物理内存中存放数据的大小,在程序运行中需要用到如果top命令没有显示, 按f键显示

SHR共享内存大小除了自身进程的共享内存,也包含其他进程的共享内存计算某个进程所占用物理内存的大小: RES - SHRswap out后,该值会下降。

查看一个进程的内存信息步骤

1.获取进程PID$ ps -aux | grep /usr/sbin/NetworkManagerroot 845 0.0 0.0 387084 13332 ? Ssl 3月28 0:00 /usr/sbin/NetworkManager --no-daemon

2.查看进程的所有线程$ ps mp 845 -o THREAD,tidUSER %CPU PRI SCNT WCHAN USER SYSTEM TIDroot 0.0 - - - - - -root 0.0 19 - - - - 845root 0.0 19 - - - - 1025root 0.0 19 - - - - 1027

3.查看所有子进程$ pstree -p 845NetworkManager(845)─┬─dhclient(30278)├─DNSmasq(1123)├─{gdbus}(1027)└─{gmain}(1025)

使用 /proc 下文件

/proc/[pid]/ 下面与进程内存相关的文件主要有maps , smaps, status。

maps: 文件可以查看某个进程的代码段、栈区、堆区、动态库、内核区对应的虚拟地址

smaps: 显示每个分区更详细的内存占用数据

status: 包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻

有名与匿名:

一个文件可以映射到进程的一段内存区域中,映射的文件描述符保存在vm_area_struct->vm_file域中,这种内存区域叫做有名内存区域,相反,属于匿名映射内存区域。

maps 文件分析

Proc/[pid]/maps 显示进程映射了的内存区域和访问权限。对应内核中的操作集为 proc_pid_maps_op,具体的导出函数为 show_map 。内核中进程的一段地址空间用一个vm_area_struct结构体表示,所有地址空间存储在task->mm->mmap链表中。

截取一行内容如下:7f4e3f5ca000-7f4e3f674000 r-xp 00000000 08:02 525202 /usr/lib/x86_64-linux-gnu/NetworkManager/libnm-device-plugin-wifi.so

Vm_area_struct每项对应解析如下表所示:

maps文件只能显示简单的分区,smap文件可以显示每个分区的更详细的内存占用数据。

smap 文件分析

截取一段文件,各字段解析如下:7f148b2fa000-7f148b2fb000 rw-p 00026000 08:02 2883675 /lib/x86_64-linux-gnu/ld-2.23.soSize: 4 kB 虚拟内存大小Rss: 4 kB 实际使用物理内存大小 RSS = Shared_Clean+Shared_Dirty+Private_Clean+Private_DirtyPss: 4 kB RSS中私有的内存页面Shared_Clean: 0 kB RSS中共享内存,没有被改写的页面Shared_Dirty: 0 kB RSS中共享内存,被改写的页面Private_Clean: 0 kB RSS中私有内存,未被改写Private_Dirty: 4 kB RSS中私有内存,被改写Referenced: 4 kBAnonymous: 4 kBAnonHugePages: 0 kBShared_Hugetlb: 0 kBPrivate_Hugetlb: 0 kBSwap: 0 kB 处于交换区的页面大小SwapPss: 0 kBKernelPageSize: 4 kB 操作系统一个页面大小MMUPageSize: 4 kB 体系结构MMU一个页面大小Locked: 0 kBVmFlags: rd wr mr mw me dw ac sd

Dirty页面如果没有交换机制的情况下,应该是不能回收的。

分析脚本:

linux的内存占用分析,Linux 内存占用分析相关推荐

  1. linux 内核空间占用cpu百分比过高,linux下分析java程序占用CPU、内存过高

    一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...

  2. linux查看native进程,Android 分析应用程序占用native内存

    Android 应用开发大家都知道可以通过DDMS来查看应用程序进程占用的内存大小:然而Native 内存并不能在虚拟堆上看到:Android系统基于Linux,这样的话其具备Linux的大多数特性: ...

  3. Java占Linux超过xms,linux下分析java程序占用CPU、内存过高

    一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...

  4. LINUX类主机JAVA应用程序占用CPU、内存过高分析手段

    本文转载 线上应用故障排查之一:高CPU占用 DBA+社群(dbaplus)丁启良 1. 应用程序占用资源高问题 目前大部分应用程序采用的是JAVA语言开发,在产品上线使用一段时间后,经常会出现某个J ...

  5. Linux下如何用命令查看内存占用情况!(建议收藏)

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] 1. 通过free命令看Linux内存 total:总内存大小. used:已经使用的内存大小(这里面包含cached和buffers和s ...

  6. linux 查看 内存 占用,Linux终端:用smem查看内存占用情况

    无论是作为系统管理员,还是作为使用桌面版Linux的简单用户,你都会注意到,某个进程在耗用你系统的所有内存. 首先要明白Linux是如何管理内存的:我多次接到用户的反映,说运行了free命令,就是无法 ...

  7. linux资源利用率检查_使用free命令查看实际内存占用(可用内存)

    linux下在终端环境下可以使用free命令看到系统实际使用内存的情况,一般用free -m方式查看内存占用情况(兆为单位).而系统实际可用内存是不是free部分呢,不是的,系统实际内存占用以及可用内 ...

  8. gifcam使用缩小内存_Fedora 上的桌面环境内存占用测试 | Linux 中国

    通常,根据功能.外观和其它品质,选择桌面是一件非常个人的偏好.但有时,你选择的桌面环境还会受到硬件限制.-- Troy Dawson Fedora 中有 40 多种桌面环境(DE).每种桌面环境都有自 ...

  9. linux 程序占内存,linux下,一个运行中的程序,究竟占用了多少内存

    1. 在linux下,查看一个运行中的程序, 占用了多少内存, 通常的命令有php (1). ps aux:html 其中  VSZ(或VSS)列 表示,程序占用了多少虚拟内存.linux RSS列 ...

最新文章

  1. 《千只鹤》--[日]川端康成
  2. 生活实遇记-Kindle好久没用,屏幕一直处于电池状态,怎么解决?
  3. java简历达内_达内教你怎么写大牛简历
  4. 【专访】PP租车张丙军:“打虎亲兄弟“,好团队才能书写互联网传奇
  5. RabbitMQ高级指南:从配置、使用到高可用集群搭建
  6. 每日 30 秒 ⏱ HTML Cosplay
  7. AtCoder4515 [AGC030F] Permutation and Minimum(dp)
  8. 毕业两年的我--奋斗中的程序员
  9. php post json请求参数传递_php post json参数的传递和接收处理方法
  10. Python 之 字典(dict)的创建、字典生成式、复制添加更新删除、查询遍历比较等
  11. SPSS统计分析行业应用实战--SPSS 24.0新增
  12. The Feynman Technique The Best Way to Learn Anything理查德•弗曼学习法
  13. Java 程序员常用资源工具集合(建议收藏)
  14. 南邮CTF逆向题第三道Py交易解题思路
  15. Files 使用体验:一款高颜值 Windows 第三方资源管理器
  16. Qt之快速生成缩略图thumbnail
  17. mac 解决sudo: no valid sudoers sources found, quitting
  18. 黑客社会工程学攻击的八种常用伎俩
  19. magicbookpro做php开发,荣耀MagicBook Pro测评:全面屏专业生产力工具
  20. python 内建排序 HOW TO

热门文章

  1. AAL模版 中英文对照
  2. 【电影】-功夫巨星成龙电影全集版-原创独门专藏-
  3. 关于软删除的一点小建议
  4. 3.0时代,公关传播在人文营销中的应用
  5. AlignedReID: Surpassing Human-Level Performance in Person Re-Identification
  6. 【问题篇】git在push上传代码时,报错“fatal: unable to access ‘‘: OpenSSL SS”
  7. 音乐API调用以及分析(以酷狗音乐为例)
  8. 解锁网易云音乐小工具_什么?网易云音乐又变灰了
  9. 用Python绘制一朵玫瑰花,送给特别的她
  10. free_rtos系统基本配置