0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux到底是什么

Wildesbeast 来源:今日头条 作者:半亩良田v5 2020-02-18 16:32 次阅读

通过日常使用电脑,我们大概都知道一个机器大概的结构由CPU、内存、硬盘以及外设构成,那么Linux服务器也一样,从上一章内容知道,我们平常关注的系统性能差不多就是这些地方,那么,我们的进程是如何在Linux上运行的呢?一、进程运行过程首先,我们的数据是存放于磁盘/NAS等存储目录当中,当需要使用这些数据的时候,则要将数据从磁盘中读取出来,经过内存再到三级缓存,然后进入到CPU中。如下图,数据从底部的存储设备一步一步的被送进入到CPU中。其用于传输数据的方式:远程存储到本地二级存储走的是网络通信的方式,而本地存储的数据进入到内存、CPU走的是BUS总线的方式。

进程启动以后,其数据被从磁盘中读取到内存里缓存,当CPU使用到它的时候,再被通过三级高速缓存送入到CPU中执行。那么当这个进程被送入到CPU中运行,是不是就可以一个人独占CPU资源,直到跑完为止呢?不是的,现代系统设计出了上下文切换的模式,每个进程运行的时候都会分配到了一个时间片,当这个时间片用完,那么当前正在运行的进程就会保留当前的状态进入到缓存当中,当再次轮到该进程使用CPU的时候,才会从缓存当中被读取出来。通过这样反复的切换,直到进程运行结束。但是我们在使用进程时,为什么没有进程切换的感觉呢?那是因为CPU的时间片以非常小的时间单位工作着,人们根本感受不到他的切换频率。在Linux系统中存在着两个空间,一个是用户空间,另外一个就是内核空间。用户空间指的是用户可以操作和访问的空间,这个空间通常存放我们用户自己写的数据等,比如磁盘NAS就是属于用户空间。内核空间就是系统内核来操作的一块空间,这块空间里面存放系统内核的函数、接口等,用户是不能直接操作的。当程序在用户空间下运行,我们把此时运行的程序的这种状态称为用户态,而当进程执行在内核空间时,这种状态称为内核态。要想让程序从用户态切换到内核态,有3种方法:1.系统调用 (软中断)2.异常(硬中断) 3.外围设备的中断(硬中断)。二、进程异常会遇到什么?进程在运行过程中不是一开始就知道使用多少内存的,在持续的运行过程中,会不断的向系统申请内存。当有应用需要读写磁盘数据时,由系统把相关数据从磁盘读取到内存,如果物理内存不够,则把内存中的部分数据导入到磁盘,从而把磁盘的部分空间当做虚拟内存使用,这部分被称为swap。如果给所有应用分配足够内存后,物理内存还有剩余,Linux会尽量再利用这些空闲内存,以提高整体I/O效率,方法是把这部分剩余内存再划分为cache和buffer加以利用。如果某个时刻,系统需要更多的内存,则会把cache部分擦除,并把buffer中的内容写入到磁盘中,然后把这两部分的空间释放给系统使用,但是再次读取cache的内容时,就需要重新从磁盘读取数据。下图是系统中存在的缓存,当系统需要内存时,就会被释放空间,然后充当内存使用。

1) Page cache主要用来作为文件系统上的文件数据缓存来用,尤其是对当进程对文件有read/write操作的时候。2) Buffer cache主要是用来在系统对块设备进行读写的时候,对块设备进行数据缓存来使用。3) directory cacha的作用是作为目录缓存,避免经常访问目录慢。4) iNode cache则能够加速访问文件速度。同一系统内的文件具有唯一识别码,这个就是iNode号。查找文件的时候会先查询该文件的iNode号,再根据iNode号定位到文件位置。一般可以理解为buffer是为了作为数据写入磁盘时的一个缓冲地带。把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。而cache经常被用于磁盘的I/O请求上,如果多个进程都有访问某个文件,于是该文件便被作为cache以方便下次被访问,这样可以提高系统性能。

三、当运行一个进程时系统内存不够会怎么样?

在工作中会遇到这样的场景:假设我的服务器就只有32G内存,当前以及使用了28G,而现在需要再运行一个需要10G内存的进程,那么会发生什么呢?

如果这个进程没有做什么优先级设定,那么这个进程会触发OOM,然后被系统kill掉。

什么是OOM?

OOM的全称是Out of memory Killer,叫内存终结者。在内存过低的情况下,OS(系统)会杀掉你的进程。当探测到内存使用不足的时候,OOM会被激活,然后挑选一个进程去终结掉。选择的目标进程使用的是一套算法,后面会说。

进程在运行过程中是怎么使用内存的呢?Linux允许程序申请比系统可用内存更多的内存,这个机制叫做Overcommit。这样做是处于优化系统考虑,因为不是所有的程序申请了内存就立刻使用的,当开始使用的时候,可能系统已经回收了一些资源,但是当使用overcommit给的内存时,系统还没有资源的话,这个时候就会触发OOM,然后干掉进程。

有的时候在系统内存不是很充足的情况下需要运行一个重要的程序,那么该如何避免此程序被OOM干掉呢?

调整进程的oom_adj值:Linux下每个进程都有个OOM权重,在/proc/$pid/oom_adj里面,取值-17~+15,取值越高,越容易被干掉。

OOM Killer最终是通过/proc/$pid/oom_score这个值来决定哪个进程被干掉。这个值是系统综合进程的内存消耗量、CPU时间、存活时间和oom_adj计算出来的。消耗内存越多分越高,存活时间越长分越低。总之。总的策略就是:损失最少的工作,释放最大的内存同时不伤及无辜的用来很大内存的进程,并且杀掉的进程数尽量少。另外,Linux在计算进程的内存消耗的时候,会将子进程所耗内存的一半同时计算到父进程中,这样子进程较多的进程就越容易被杀掉。

在Linux中如何查看是否有进程被OOM干掉了呢?

运行dmesg即可查询到,或者到/var/log/messages中查看。从网上找了个OOM的图:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10840

    浏览量

    211395
  • Linux
    +关注

    关注

    87

    文章

    11254

    浏览量

    209106
  • 服务器
    +关注

    关注

    12

    文章

    9063

    浏览量

    85274
收藏 人收藏

    评论

    相关推荐

    PLC到底是什么呢?

    PLC到底是什么呢?
    发表于 10-10 09:30

    这是到底是什么元件?

    开关电源一个小贴片,在k2717前端。丝印MY还有133字样。这到底是什么元件?什么原理?
    发表于 05-26 15:06

    如何评价《Linux就该这么学》这本书?

    的第一篇就是搭建环境,但是小白真的可能会问虚拟机是个啥?Linux到底是个啥?甚至有些小白同学还不会装Windows系统,或者还没搞明白计算机这块“铁疙瘩”到底是怎么运行起来的,如果你也是连这些问题都没
    发表于 10-21 13:01

    请问CKFA到底是什么

    在其他网站看到CKFA,这个到底是什么啊?具体怎么用啊?希望能有比较详细的解释,谢谢!
    发表于 08-20 07:18

    这个到底是什么电路

    这个到底是积分电路还是滤波电路还是RC延时电路,我已经头晕了
    发表于 01-20 21:56

    DSP到底是什么?DSP的要素是什么?

    DSP设计人员还是要知道到底DSP到底是什么?DSP的三要素是:性能、价格与功耗吗?
    发表于 03-05 06:23

    QPainter到底是什么?

    QPainter到底是什么?
    发表于 09-28 06:30

    STM32固件库到底是什么?

    STM32固件库到底是什么?
    发表于 11-30 07:34

    3516 L1 Linux版本成功启动!可以愉快地玩耍了~

    set 编译的是L0 和 L1, ipcamera_hispark_taurus 是L1 liteOS-A内核的,那这个是 ipcamera_hispark_taurus_linux 到底是干嘛用
    发表于 01-06 10:39

    到底是学STM32还是学嵌入式linux

    01话 题经常有大学生同学纠结:我到底是学STM32还是学嵌入式linux。这个问题很多人都会有自己的看法,今天我试着从多个角度,把我了解到的事实讲一下,希望对大家有所启发。STM3202STM32
    发表于 02-07 07:06

    RGB屏到底是什么?

    RGB屏到底是什么?
    发表于 02-14 07:18

    什么是嵌入式Linux

    Linux到底是什么呢? 嵌入式linux 是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。简单来说,是除了电脑之外可以运行程序的设备,将C
    发表于 10-11 13:47

    Linux到底是怎么样来的?发展过程是如何的

    Linux 内核非常庞大,我说的非常大并不是为了吓唬大家,确实是非常多的代码,超过 600 万行的代码,所以我写文章介绍 Linux 内核,也不可能每一行代码去分析,但是我会提炼其中的重点出来,告诉
    的头像 发表于 08-11 11:00 3898次阅读

    Linux内核到底是什么应该如何学习

    Linux可以说是近期非常火的了,有的人想学习linux内核,那他到底是什么呢?
    发表于 10-06 18:02 1899次阅读

    Linux到底是如何收发网络包的

    为了使得多种设备能通过网络相互通信,和为了解决各种不同设备在网络互联中的兼容性问题,国际标标准化组织制定了开放式系统互联通信参考模型(pen System Interconnection Reference Model),也就是 OSI 网络模型,该模型主要有 7 层,分别是应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层。
    发表于 01-03 17:49 769次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>到底是</b>如何收发网络包的