某个进程的内存占用情况

查找进程pid——>进入该进程的目录/proc/{pid}/。有三个文件记录了进程内存

root@ROUTER:~# ps | grep zebra
1507 root 9504 S /usr/sbin/zebra -d
30884 root 1324 S grep zebra
root@ROUTER:~# cd /proc/1507
root@ROUTER:/proc/1507# cat stat
1507 (zebra) S 1 1505 1505 0 -1 4194624 170600 2189441 4 9 3679 4445 22287 35573 20 0 16 0 5745 9732096 1105 4294967295 65536 617472 2127216064 0 0 0 0 4102 1401024201 0 0 0 17 0 0 0 0 0 0 686220 910636 20680704 2127216310 2127216329 2127216329 2127216620 0
root@ROUTER:/proc/1507# cat statm
2376 1105 742 135 0 877 0
root@ROUTER:/proc/1507#
root@ROUTER:/proc/1507# cat status
Name: zebra
Umask: 0002
State: S (sleeping)
Tgid: 1507
Ngid: 0
Pid: 1507
PPid: 1
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 32
Groups: 0
VmPeak: 9920 kB
VmSize: 9504 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 4820 kB
VmRSS: 4420 kB
RssAnon: 1452 kB
RssFile: 2952 kB
RssShmem: 16 kB
VmData: 3376 kB
VmStk: 132 kB
VmExe: 540 kB
VmLib: 5224 kB
VmPTE: 16 kB
VmPMD: 0 kB
VmSwap: 0 kB
Threads: 16
SigQ: 0/944
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000200001006
SigCgt: 000000005381eec9
CapInh: 0000000000000000
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000
Cpus_allowed: 1
Cpus_allowed_list: 0
voluntary_ctxt_switches: 19498
nonvoluntary_ctxt_switches: 34374
root@ROUTER:/proc/1507#

  

  1. 从status这个文件的几个参数来说明。VmPeak和VmSize这两个参数一致,VmPeak指的是当前进程运行过程中占用内存的峰值。VmSize指的是进程现在正在占用的内存。(这两个值是否正常不应该一直都相等?因为如果一直都相等说明占用内存一直在升高?可以用这个现象来排查进程是否有内存泄露?)
  2. 在statm的第一个数字2376表示的也是进程内存占用,只是他是以Page表示,而VmSize以KB表示,1Page=4KB。stat的第23个字节vsize数值为643141632,看statm文件说明是说它单位也是Page,但是我们的linux版本显示的单位是B。
  3. VmHWM是程序得到分配到物理内存的峰值。VmRSS是程序现在使用的物理内存。单位是KB。statm的第二个数字和stat的第24个数字都是单位为Page的占用内存值。
  4. VmRSS和VmSize的差别是什么?
  5. Threads: 16,表示这个进程有 16 个线程在运行。

怎么判断系统内存是否泄漏?

root@ROUTER:/mnt/mmcblk0p1/home# free
total used free shared buffers cached
Mem: 417752 285236 132516 16544 64680 47324
-/+ buffers/cache: 173232
Swap: 0 0 0

  

在linux中利用free命令查看free的情况,显示出来的可用

内存=free+buffers+cached

即等于-/+ buffers/cache:一行中的第二个数值244520.这个才是实际可用的内存,当系统的free不够时会将cached的内容转向free。

所以查看系统内存是否泄漏,就是利用脚本定期打印可用内存的值,检查一段时间后内存大小是否变小。

理解内存的分配机制

这个比较复杂,可以参考一个链接:https://www.cnblogs.com/ralap7/p/9184773.html

按照链接中描述的方式去理解当一个进程工作时,内存是如何分配的。然后通过查看/proc/{pid}/maps,可以具体查看到某个进程当前工作过程中占用的内存位置。

Linux CPU问题排查的更多相关文章

  1. Linux 性能优化排查工具

    下图1为 Linux 性能优化排查工具的总结 图1 诊断 CPU 工具 查看 CPU 核数 总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU ...

  2. Linux CPU亲缘性详解

    前言 在淘宝开源自己基于nginx打造的tegine服务器的时候,有这么一项特性引起了笔者的兴趣.“自动根据CPU数目设置进程个数和绑定CPU亲缘性”.当时笔者对CPU亲缘性没有任何概念,当时作者只是 ...

  3. 查看线程linux cpu使用率

    Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算 转 http://www.cnblogs.com/lidabo/p/4738113.html目录(?)[-] proc文件系统 p ...

  4. Linux CPU数量判断,通过/proc/cpuinfo.

    Linux CPU数量判断,通过/proc/cpuinfo. 相同 physical id :决定一个物理处理器 如果“siblings”和“cpu cores”一致,则说明不支持超线程,或者超线程未 ...

  5. How do I Find Out Linux CPU Utilization?

    From:http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html Whenever a Linux sys ...

  6. Linux CPU监控指标

    Linux CPU监控指标 Linux提供了非常丰富的命令可以进行CPU相关数据进行监控,例如:top.vmstat等命令.top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执 ...

  7. 转载: 一、linux cpu、内存、IO、网络的测试工具

    来源地址: http://blog.csdn.net/wenwenxiong/article/details/77197997 记录一下 以后好找.. 一.linux cpu.内存.IO.网络的测试工 ...

  8. Linux CPU使用率含义及原理

    相关概念 在Linux/Unix下,CPU利用率分为用户态.系统态和空闲态,分别表示CPU处于用户态执的时间,系统内核执行的时间,和空闲系统进程执行的时间. 下面是几个与CPU占用率相关的概念. CP ...

  9. Java死锁排查和Java CPU 100% 排查的步骤整理

    ================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...

随机推荐

  1. nodemon运行 提示错误:无法加载文件 C:\Users\gxf\AppData\Roaming\npm\nodemon.ps1,因为在此系统上禁止运行脚本。

    nodemon运行 提示错误:无法加载文件 C:\Users\gxf\AppData\Roaming\npm\nodemon.ps1,因为在此系统上禁止运行脚本. 这是你笔记本禁止运行脚本,解决办法 ...

  2. Tools - 在线编译环境和工具汇总

    菜鸟教程 https://www.runoob.com/ 支持语言种类丰富,无需注册,包含教程.笔记.手册等内容. 菜鸟在线工具:https://c.runoob.com/ 菜鸟在线编译器:https ...

  3. python 爬虫实例(二)

    环境: OS:Window10 python:3.7 描述 打开下面的网址,之后抓取其中的图片 https://music.163.com/#/artist/album?id=101988&l ...

  4. Extjs locked无效,使用enableLocking即可

    一.前言 在使用 extjs 做表格时,由于表格的列太多,我们需要设置一些固定列来查看数据,所以我们需要用到 locked 属性.普通加载 columns 的列是有效的,如果是动态加载的话,使用 lo ...

  5. sublime text3 修改快捷键为eclipse

    Preferences -> Key bindings - User [ { "keys": ["shift+enter"], "command ...

  6. Python类的访问限制

    使用两个_将变量设置为private,访问变量可定义get方法,对变量值修改可定义set方法,修改变量值的时候可检查参数的有效性. class Student(object): #定义一个Studen ...

  7. 2019最新黑链代码expression:隐藏链接代码

    之前有收集了一些主流的隐藏链接代码,最近又发现一种相当牛X的代码,如下: 源代码: <div style="position:absolute;left:expression(1-90 ...

  8. ORAchk - 数据库配置检查工具

    1.概要2.下载和安装3.如何执行4.执行过程5.报告6.参考 1.概要 ORAchk之前被称为RACcheck,后来它的检查范围进行了扩展,改名为了ORAchk,它是在数据库系统进行健康检查的一个专 ...

  9. input的小技巧 清除自动记录

    input 消除自动记忆功能 在html里就可以直接清除了<input type="text" autocomplete="off"> input ...

  10. str.format() 格式化数字的多种方法

    Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能. 基本语法是通过 {} 和 : 来代替以前的 % . format 函数可以接受不限个参数 ...