1. free命令
free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。
直接输入free命令,显示如下
![](https://i-blog.csdnimg.cn/blog_migrate/495fa5d7d7a57d8825bfd3098ffc35cb.png)
free命令默认是显示单位kb,可以采用free -m和free -g命令查看,分别表示MB和GB
另外,free -h会自动选择以适合理解的容量单位显示
![](https://i-blog.csdnimg.cn/blog_migrate/2b8b3f413c21c3e4a24abfe80b0628f7.png)
Mem:表示物理内存统计,如果机器剩余内存非常小,一般小于总内存的20%,则判断为系统物理内存不够
Swap: 表示硬盘上交换分区的使用情况,如剩余空间较小,需要留意当前系统内存使用情况及负载,当Swap的used值大于0时,则表示操作系统物理内存不够,已经开始使用硬盘内存了。
第1行数据11G表示物理内存总量;
6.5G表示总计分配给缓存(包含buffers与cache)使用的数量,但其中可能部分缓存并未实际使用;
1.3G表示未被分配的内存;
shared表示共享内存;
4.0G表示系统分配但未被使用的buffers数量;
4.7G表示系统分配但未被使用的available数量
今天被叫着看一个性能问题,发现了一个很有意思的事情,当Linux的物理内存快被耗尽时,系统会把一些进程占用的内存转移swap区,当物理内存被释放一部分时,swap区的一些内存占用又慢慢回到mem区,但是mem区却不再是之前的满负荷状态,而是有一部分free的内存!
【17G大小进程压力测试结果】
【总结】
1.当物理内存快被耗尽时,系统并没有崩溃,而是拿swap做临时内存,当两者都耗尽,系统OutofMemory
2.物理内存到达峰值,系统中可能一些不常用的进程内存占用被踢到swap区
3.当Mem区的资源进行释放时,被挪到swap的内存并不会全部回来的,随着系统或者程序的唤醒才会慢慢回到mem区
4.Swap是内存不够时磁盘虚拟出来的内存,磁盘主要是I/O级别的操作并不是系统内核级别的操作,处理速度跟Mem区不是一个等级
---------------------
2.哪些应用程序占的内存比较多
ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -r | less
执行以上命令可查看各个程序进程内存使用的内存情况,如下图所示,第一列为进程占用的内存百分比,可以看到哪些应用程序占的内存比较多,用于排查问题:
2.top命令排查内存
top 命令查看系统的实时负载, 包括进程、CPU负载、内存使用等等;
直接输入top命令
![](https://i-blog.csdnimg.cn/blog_migrate/7030005300bcd31e9af26520131f967e.png)
下面表示整体信息
![](https://i-blog.csdnimg.cn/blog_migrate/b051f5cb7ea53ad94338b4e69c23a134.png)
列表的含义
![](https://i-blog.csdnimg.cn/blog_migrate/c4416ab4ffe44899e9665104a556261a.png)
进入top的实时界面后,默认按照CPU的使用率排序,通过“shift+m”按键将进程按照内存使用情况排序,可以查看哪些进程是当前系统中的内存开销“大户”。
top命令中,按下 f 键,进入选择排序列的界面,这里可以选择要显示的信息列,要按照哪些信息列进行排序等
参照红框的说明来选择是否显示那些列就行,标*的就是显示
![](https://i-blog.csdnimg.cn/blog_migrate/97acc00236268d4ab95191b9b1d63ed3.png)