linux内存基础
简介
操作系统的职责就是管理服务器的硬件资源,内存就是被操作系统管理的一种硬件资源。内存和磁盘一样,也是存放数据的,但是性能比磁盘高很多,差别可能是3到4个数量级(1000~10000倍)。如果cpu想要读写磁盘数据,需要先将磁盘的数据读取到内存,cpu读写内存上面的数据,最后操作系统将内存修改后的数据同步到磁盘。
页
操作系统按照页管理内存,一般内存页大小为4KB,每次进程请求内存空间,操作系统分配的内存大小都是几个页。页的状态标记有很多。
查看内存信息
free -h #free -h显示的free列参考意义很小,available可以代表可用内存大小
vmstat -w -t 1 #如果si so持续不为0,就是服务器内存不够了,就要考虑扩充内存了
sar -B 1
/proc/zoneinfo
/proc/buddyinfo
/proc/meminfo
/proc/vmstat
swap
swap是磁盘上一块存储空间。当内存使用超过一定值的时候,操作系统就会启动内核进程swapd,将部分内存数据置换到swap,从而释放一部分内存出来,通常置换到swap的都是进程长时间不读取的数据。有的人将swap称为虚拟内存,我觉得称为交换空间比较好。通过free命令可以看到swap使用情况。swapd回收内存可以认为是异步回收内存,因为swapd是一个内核进程。但是从内存置换到磁盘后可能发生应用需要读取这块内存数据,就又需要从swap将数据置换到内存,这个现象可以通过命令vmstat输出的si,so列观察。如果swapd的回收速度没有应用分配使用内存的速度快,可用内存还是会持续减少,低于一定值的时候就会触发每次应用内存请求都扫描和检查是否可以回收内存,这个现象可以通过命令sar -B 1输出的pgscand观察。man vmstat,man sar 可以查看各列的意思。
进程地址空间
linux的每个进程有个描述可用地址空间的结构,描述进程可以使用哪些地址,比如进程调用malloc请求1MB的内存,那么进程的可用地址空间中就会增加1MB,但是这1MB并不会直接映射到物理内存,只用当实际读写的时候才会将1MB的物理内存和进程1MB的地址空间之间建立映射(映射是通过缺页中断建立的);top命令看到的VIRT列就是进程可用地址空间大小,RES就是进程占用的物理地址空间大小。

浙公网安备 33010602011771号