Linux系统性能指标-内存指标

摘自《高性能Linux服务器运维实战》

内存指标

 在进程执行过程中,Linux内核会根据需要给进程分配一块内存区域,进程就把这片区域作为工作区,按要求执行操作。这就像给读者分配一张自己的桌子,读者可以在桌子上摆放文档、备忘录,然后展开自己的工作一样。区别在于,内核会以更加动态的方式分配空间。系统上运行的进程经常是成千上万的,但是内存却是有限的。因此,Linux必须高效地处理内存资源。这就涉及了Linux下的内存管理机制。

1.物理内存和虚拟内存

 物理内存就是系统硬件提供的内存大小,是真正的内存。在Linux下还有一个逻辑内存的概念,逻辑内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存区域,用作逻辑内存的磁盘空间被称为交换空间(Swap Space)。但是,在Linux操作系统中,无论是系统内核,还是应用程序,都不能直接使用物理内存和逻辑内存,要使用这些内存,需要通过一个映射机制来实现。也就是说,Linux操作系统会把所有内存(包括物理内存和逻辑内存)都映射成虚拟内存,这样,应用程序在使用内存时,就需要向Linux内核请求一个特定大小的内存映射,并且收到一个虚拟内存的映射。这个申请到的虚拟内存不一定全部是物理内存的映射,还可能包含由磁盘上的交换空间映射来的内存。
 Linux的这种虚拟内存管理机制对用户和应用程序通常都是不可见的。所以,如果要掌握Linux内存调优的办法,就必须先理解Linux内存架构、地址布局以及Linux如何高效管理内存空间。

2.页高速缓存和页写回机制

 页是物理内存或虚拟内存中一组连续的线性地址,Linux内核以页为单位处理内存,页的大小通常是4KB。当一个进程请求一定量的页面时,如果有可用的页面,内核会直接把这些页面分配给这个进程,否则,内核会从其他进程或者页缓存中拿来一部分给这个进程用。内核知道有多少页可用,也知道它们的位置。
 如果在进程请求指定数量的内存页时没有可用的内存页,内核就会尝试释放特定的内存页给新的请求使用。这个过程叫做内存回收。其中,kswapd内核线程负责页面回收。
 kswapd在虚拟内存管理中负责换页,操作系统每过一定时间就会唤醒kswapd,它基于最少使用原则(Least Recently Used,LRU)在活动页中寻找可回收的页面,看看内存是否紧张,如果不紧张,则进入睡眠状态。在kswapd中,有2个阈值(pages_hige和pages_low),当空闲内存页的数量低于pages_low的时候,kswapd进程就会扫描内存并且释放出32个free pages,直到free pages的数量到达pages_high。
 Linux在负载比较大(内存很紧张)的时候一般会看到这样的两个进程:kswapd0和kswapd1。如果这些进程占用资源很多,尤其是在负载很大的业务系统中,可能引起系统的宕机,如果这些进程占用资源非常高,就要考虑优化系统,或添加硬件资源。
 在某些情况下,kswapd进程如果频繁被唤醒会过度消耗CPU,此时可以通过设置大页内存(HugePages)来解决。具体实现方法将在后面详细介绍。

3.Swap交换空间

 Linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到Swap交换空间中,而将经常使用的信息保留到物理内存。
 要深入了解Linux内存运行机制,需要知道下述几个方面。
 首先,Linux系统会不时地进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间。
 其次,Linux进行页面交换是有条件的,不是所有页面在不用时都交换到Swap。Linux内核根据“最近最经常使用”算法,仅仅将一些不经常使用的页面文件交换到Swap。有时会看到这么一个现象:Linux物理内存还有很多,但是Swap却仍使用了很多。其实,这并不奇怪,例如,一个占用很大内存的进程在运行时,需要耗费很多内存资源,此时就会有一些不常用页面文件被交换到Swap中。但后来这个占用很多内存资源的进程结束并释放了很多内存时,刚才被交换出去的页面文件并不会自动地交换进物理内存,除非有这个必要。那么此刻系统物理内存就会空闲很多,同时交换空间也在被使用,就出现了刚才所说的现象了。
 最后,Swap的页面在使用时会首先被交换到物理内存,如果此时没有足够的物理内存来容纳这些页面,它们又会被马上交换出去,如此一来,虚拟内存中可能没有足够空间来存储这些交换页面,最终会导致Linux出现假死机、服务异常等问题。Linux虽然可以在一段时间内自行修复,但是恢复后的系统已经基本不可用了。
 由此可知,合理规划Swap非常重要。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值