linux内存使用情况分析(free + top)
时间:2022-07-23
本文章向大家介绍linux内存使用情况分析(free + top),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
文章转载自: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
- c# IO&&线程 打造 定时打开指定程序
- 前FDIC主席:比特币政策不应打击加密货币发展
- 任何人都不应该控制区块链供应链
- c# IO操作(带进度的文件复制器,读取文本文件的指定行)
- 高科技来了!玩游戏一样开船的时代来了……
- C++库大全
- 人工智能行业前景预测 全球市场或超2700亿元
- Arxiv网络科学论文摘要14篇
- 工信部:网络强国建设2018年重点工作任务
- 刚刚!张小龙再出重磅!微信小程序掀起新零售红利狂潮!
- 无人驾驶系列——深度学习笔记:Tensorflow的安装-windows系统
- 2018年12大顶级云安全威胁
- 缤果盒子为域名意识打call 六位数秒下bingobox.com
- 用Qt写软件系列二:QCookieViewer(浏览器Cookie查看器)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何用云开发快速搭建实时 Todo List 应用
- Angular应用的入口
- Angular里的structural directive的一个例子
- Angular条件指令ngIf的一个例子
- Angular的property binding一个例子
- Angular里的按钮事件注册方法一例
- 如何使用Angular的@Input()装饰器
- Angular父子Component之间的事件通知机制
- dotnet OpenXML 解析 PPT 文本字体获取详解
- R练习50题 - 第一期
- [889]python处理HTML转义字符
- python 利用jinja2模板生成html代码实例
- vue项目使用 富文本 封装
- typescript基础篇(5):类
- .Net微服务实战之Kubernetes的搭建与使用