Linux性能优化----内存性能

1.虚拟地址

Linux虚拟地址空间分为内核空间用户空间。32位和64位操作系统的虚拟地址空间图如下:

进程在用户态只能访问用户态地址空间,进程进入到内核态才能访问内核态地址空间。

虚拟内存和物理内存通过内存映射进行对应。

2.虚拟内存的分布

3.内存的分配和回收

C语言提供的malloc对应的系统调用为brk()和mmap()。

对于内存分配小于128k时调用brk(),这些内存释放后并不会立即归还给操作系统,而是缓存起来,以便重复利用;内存分配大于128k时,使用mmap(),在文件映射区分配一块内存,释放的时候会归还给系统。

  • brk方式:提高内存的利用率,但在内存工作繁忙时,容易造成内存碎片。
  • mmap方式:适合大块内存的分配,内存工作繁忙时,会造成缺页异常,降低系统的性能。

值得注意的时,分配内存时,首次访问并不会真正分配内存,而是通过缺页异常进入内核态,再由内存分配内存。

如果遇到更小的内存分配,Linux 则通过 slab 分配器来管理小内存。

应用程序用完内存后,还需要调用 free() 或 unmap来释放。当系统内存紧张的时候,会通过回收缓存、回收不常用的内存(写到磁盘swap)、杀死进程(OOM)等手段进行缓解内存紧张。

4.查看内存的使用情况

$ free

  •  total:总内存大小
  • used:已使用的内存大小,包括共享内存
  • free:内使用的内存大小
  • shared:共享内存大小
  • buff/cache:缓存和缓冲区的大小
  • available:新进程可用的内存大小

available 不仅包含未使用内存,还包括了可回收的缓存,所以一般会比未使用内存更大。

如果查看每个进程的内存使用情况,则使用top/htop命令;

  • VIRT:虚拟内存大小
  • RES:常驻内存大小,实际的物理内存大小
  • SHR:共享内存大小
  • %MEM:内存使用百分比

5.buff和cache

$ cat /proc/meminfo

  • buff:内核缓冲区用到的内存,对应的是 /proc/meminfo中的 Buffers 值。
  • cache:是内核页缓存和 Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached与 SReclaimable 之和。

Buffer 是对磁盘数据的缓存,而 Cache 是文件数据的缓存,它们既会用在读请求中,也会用在写请求中。

6.缓存命中率

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值