美文网首页python入门基础学习
从门外到门内:Linux基础知识,干货十足,打包带走!

从门外到门内:Linux基础知识,干货十足,打包带走!

作者: 编程新视野 | 来源:发表于2018-11-12 15:47 被阅读3次

    最近在兼职部分运维工作,之前没怎么做过,对Linux不是那么的熟悉,这导致的主要问题是,当出现性能问题,不知道看那些指标,那些指标有什么含义。有不足的当然要恶补一下,所以就有了这篇文章。这篇文章只是抛砖引玉,改天有时间写篇,linxu性能监控,大体上就是服务器性能应该看那些指标,去定位问题所在。

    内存

    image

    存储媒介

    速度:L1/L2/ cache > 内存 > 固态 > 硬盘。一般的缓存路径是:硬盘or固态—>内存 —> L1/L2缓存。 将数据存入L1/L2缓存一般是那种比较底层的应用会采取的方式,例如linux的TLB(将虚拟地址到物理地址的映射缓存到 L1 cache中),加快地址转换的速度。

    虚拟内存

    虚拟内存是Linux管理内存的一种技术。它使得每个应用程序都认为自己拥有独立且连续的可用的内存空间。大体关系如下。

    image

    这里需要了解的:

    1. 虚拟内存的描述的结构叫memory mapping,主要描述了虚拟地址的起始位置,长度,权限,以及类型
    2. 虚拟内存关联的不一定是物理内存,还可以是磁盘,swap区。因为是映射,可以映射到各种存储媒介中去,这是虚拟内存强大的地方之一
    3. 虚拟内存由于是映射,所以可以先分配虚拟内存,到了使用时才分配真正的物理内存,这个叫延迟加载。大体的过程是这样子的。1. 读虚拟内存 —> 发现没有分配物理内存 —> 缺页中断 —> 分配物理内存 —> 与虚拟内存产生管理 —>再次读取。这样做是为了提高内存的使用效率。需要注意的是并不是任何情况下都是延迟加载的。
    4. 物理内存可以映射到不同的进程中的虚拟内存中去(多对多关系),所以可以实现不同的进程共享内存

    交换空间

    当系统物理内存吃紧时,Linux会将内存中不常访问的数据保存到swap上。一个看内存是否不够的重要指标swap的使用率

    这里主要需要了解的是:

    1. 一般当需要使用到swap的时候,这说明系统内存不够用了,处理速度会各种慢,虽然服务暂时可用,但很慢!!!,分分钟和死掉没啥区别。
    2. 什么时候用swap, 什么时候不该用。结论是在内存勉强够用的情况下,可用使用swap,其它情况下不需要使用。内存不够的情况下,合理的做法是加内存。内存够的情况下swap没啥用处,除非需要休眠,但是服务器当然是24小时工作的,即便是内存泄露,让内核触发OOM Killer,重启也好过,服务变得很慢,处于假死状态。

    page cache & buffer cache

    cache和buffer都是对接两个速度不对称的设备一块区域,一般来说,cache是加速读,buffer是加速写的(处理数据产生的速度 > 数据写入的速度,中间加个buffer使用数据写入均匀化,每次写入更多的数据)。page cache和buffer cache都是存储到内存当中,page cache缓存的是文件系统中的内容,用来加速文件的读取,而buffer cache缓存的是块设备中内容,加速对块设备的写入。最后,cache&buffer,这两个是好东西,对于对接两个速度不对称的系统都可以用到。

    这里需要了解一下的:

    1. 当系统中free的内存很小时,不代表真的内存不够用,当free的内存很小,buffer cache和page cache也都很小,此时才代表系统内存不够用了。
    2. 读写文件的路径: 读—> page cache —> buffer cache —> 磁盘 写—> page cache —> buffer cache —> 磁盘
    3. 可以手动的将page cache释放掉。先刷新cache中的内存到磁盘,再清除
    image

    Oom killer

    当系统内存不够时,将会触发oom killer通过一定的算法选取一个进程来杀掉。注意了!!!不是内存使用最高的进程会被杀掉

    这个需要了解的是

    1. 算法的权重与分数:/proc/[pid]/oom_adj, [-17, 15] -17表示禁止被kill(可以通过写入-17来达到禁止杀死的目的), 数字越大代表越容易被杀掉。分数: /proc/[pid]/oom_score 根据oom_adj算出来的,内部不够时选最高分的来杀掉。
    2. 查看被oom killer死掉的log: dmesg | grep -i 'killed process'

    打印出分数最高的进程的shell脚本

    image

    内存碎片

    1. 外部碎片:未被分配的内存,由于太多零碎的不连续小内存,无法满足当前较大内存的申请要求
    2. 原因:频繁的分配与回收物理页导致大量的小块内存夹杂在已分配页面中间
    3. 内部碎片:已经分配的内存,却不能被利用的内存空间
    4. 缘由:所有内存分配必须起始可被4、8或16(体系结构决定)整除的地址或者MMU分页机制限制
    5. 实例:请求一个11Byte的内存块,系统可能会分配12Byte、16Byte等稍大一些的字节,这些多余空间就产生碎片

    结语:简单的分享一下,还有很多知识没有讲到。想学习的朋友可以添加小编学习群813542856即可获得10套PDF以及大量学习资料。

    相关文章

      网友评论

        本文标题:从门外到门内:Linux基础知识,干货十足,打包带走!

        本文链接:https://www.haomeiwen.com/subject/cfjcfqtx.html