free
支持查看空闲的和已使用的物理内存和交换分区所占用的系统内存情况,改信息是通过解析/proc/meminfo
文件中的内容进行获取。
这里简单描述一下展示几列内容的含义:
total
系统总内存 ,显示的Mem
和Swap
为/proc/meminfo
中的MemTotal and SwapTotal
项used
被使用的内存,通过total - free所得free
未使用的内存,为/proc/meminfo
中的MemFree and SwapFree
项shared
共享内存,大多被tmpfs
使用的内存,为/proc/meminfo
中的Shmem
选项,内核版本2.6.32
以上可用,如果不可用,则会显示0buffers
被内核使用的缓冲区,/proc/meminfo
中的Buffers
cache
被操作系统页缓存和slabs占用的内存,/proc/meminfo
中的Cached
和Slab
。关于slab的介绍可以参考Linux内存管理中的slab分配器buff/cache
buffers和cache占用的内存之和available
可用的内存free [options]
-b
指定输出单位为Bytes
-k
指定输出单位为KB
-m
指定输出单位为MB
-g
指定输出单位为GB
,还可以指定--tera
–TB,peta
–PB 不过一般不会有这么大的单节点内存了-h
以人性化的输出查看内存,超过M的显示为M,超过G的显示为Gfree -t
free -th
free -s 1 -c 10 -h
每隔一秒打印一次,总共打印10次
free -wh
swap space 是磁盘上的一块区域,可以是一个分区,也可以是一个文件。所以具体的实现可以是 swap 分区也可以是 swap 文件。当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。
内核提供 swappiness 的参数,用于配置需要将内存中不常用的数据移到 swap 中去的紧迫程度,默认为60,表示内存可以将不常使用的数据60%迁移到swap分区。
使用/sbin/sysctl -a|grep swappiness
查看配置情况
在/etc/etc/sysctl.conf
修改配置 vm.swappiness = 70
使用/sbin/sysctl -p /etc/sysctl.conf
应用配置
参考linux 文件IO与内存映射:page cache页高速缓存
free 是真正尚未被使用的物理内存数量,至于 available它是从应用程序的角度看到的可用内存数量,Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差
更多内容,欢迎关注微信公众号:全菜工程师小辉~前言在笔者上一篇博客,详解了NIO,并总结NIO相比BIO的效率要高的三个原因,彻底搞懂NIO效率高的原理。这篇博客将针对第三个原因,进行更详细的讲解。首先澄清,零拷贝与内存直接映射并不是Java中独有的概念,并且这两个技术并不是等价的。零拷贝零拷贝是指避免在用户态(User-space)...
一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内.当我们声明变量时,那么编译器...
我的爱机是一台ThinkPad T420,原装三星DDR 1333 4G内存一根,还剩一根内存位置,最近趁京东6.18促销,准备增加一根物理内存。为了确保兼容性,觉得仍然选购DDR 1333 4G内存,于是购买了金士顿这款,比如DDR3 1600的还贵。 这个安装过程完全参照该内存的网页提示进行 这里简单记录一下,以备...
陪伴我多年的老本ThinkPad T420渐渐垂垂老矣, 我想更新一下可以更新的部分, 比如将2.5寸HDD更换为SSD, 将单条4G内存再增加一根, 凡此种种想法, 可能最后归结为如何获取该笔记本的硬件配置信息, 在windows下面使用鲁大师之类的检测软件, 也许很好搞定,但是在Ubuntu 14.04平台上如果办到呢? 很简单...
一.内存错误出现的场景 这几天在重构ATS插件代码的过程中遇到了烦人的内存泄露问题, 周五周六连续两天通过走查代码的方法,未能看出明显的导致内存错误的代码, 同时也觉得C和C++混合编程得到一个动态库, 在一个.cpp主文件中,即用new又用malloc来动态分配内存, 可能会导致内存错误.后来网上调研和查资料发现, new和mal...
Java的基础知识有很多,但是我认为最基础的知识应该要属jdk的基础代码,jdk的基础代码里面,有分了很多基础模块,其中又属jdk包下面的lang包最为基础。 我们下面将总结和分析一下lang包下面最为基础和常用的几个部分。 1:常用的对象类型包 (1)其中最基础的类为Object,所有的对象都是继承于这个类的。我们知道所有的类如果...