首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux内存使用情况分析(free + top)

linux内存使用情况分析(free + top)

作者头像
我是李超人
发布2020-08-21 00:37:00
2.4K0
发布2020-08-21 00:37:00
举报

文章转载自:https://www.cnblogs.com/pengdonglin137/p/3315124.html

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

  • used=total-free 即 total=used+free
  • 实际内存占用:used-buffers-cached 即 total-free-buffers-cached
  • 实际可用内存:buffers+cached+free
                   total       used       free     shared    buffers     cached
Mem:            128        119           8          0            1               22
-/+ buffers/cache:        95          32
swap:          255            0         255

第1行Mem数据:

  • total 内存总数: 128
  • used 已经使用的内存数: 119
  • free 空闲的内存数: 8
  • shared 当前已经废弃不用,总是0
  • buffers Buffer Cache内存数: 1
  • cached Page Cache内存数: 22

第2行-/+ buffers/cache:

  • -buffers/cache 的内存数:95 (等于第1行的 used - buffers - cached)
  • +buffers/cache 的内存数: 32 (等于第1行的 free + buffers + cached) 可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。

第三行数据是交换分区SWAP的,也就是我们通常所说的虚拟内存。

为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。

感兴趣的可以进一步参考文件/proc/meminfo,free命令就是根据它的信息生成的。free命令的源码可从procps-xxx-.src.rpm获取,xxx为版本号,比如procps-3.2.3-5.3.src.rpm。

知道了内存的使用概括,如何查找内存占用较高的进程呢?可以使用top命令。

top - 10:45:01 up 135 days, 23:34,  2 users,  load average: 0.01, 0.03, 0.05
Tasks: 838 total,   1 running, 837 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.6 us,  0.3 sy,  0.0 ni, 98.0 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                
 78245 root      20   0 10.224g 2.598g  14008 S  46.5  4.1 414:40.34 java                                   
 78625 root      20   0 9921416 1.002g  13992 S  19.3  1.6 640:11.10 java                                   
162617 root      20   0 2373152 575292  12540 S   8.6  0.9 502:46.88 gnome-shell                            
  4651 root      20   0  324476  15300   1836 S   1.7  0.0 118:43.14 Xorg                                   
138801 root      20   0 21.202g 1.393g  16620 S   0.7  2.2   0:18.46 java                                   
139865 root      20   0  124276   2292   1184 R   0.7  0.0   0:00.12 top                                    
111764 mysql     20   0  9.949g 4.721g   6708 S   0.3  7.5 497:02.17 mysqld                                 
     1 root      20   0   50820   3772   2004 S   0.0  0.0   0:45.80 systemd     

其中VIRT是虚拟内存,RES是持续占用内存,SHR是共享内存 可以看到当前PID=78245这个进程占用的内存较高,通过ps -ef | grep 78245可以查看进程名称。

[root@s160 scripts]# ps -ef | grep 78245
root      78245  78244  4 Jan08 ?        06:54:51 java -Xms128m -Xmn128m -Xmx2048m -jar byinterserver-0.0.1-SNAPSHOT.jar
root     139991 132970  0 10:47 pts/0    00:00:00 grep --color=auto 78245
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档