99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux到底是什么

Wildesbeast ? 來源:今日頭條 ? 作者:半畝良田v5 ? 2020-02-18 16:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

通過日常使用電腦,我們大概都知道一個機器大概的結構由CPU、內存、硬盤以及外設構成,那么Linux服務器也一樣,從上一章內容知道,我們平常關注的系統(tǒng)性能差不多就是這些地方,那么,我們的進程是如何在Linux上運行的呢?一、進程運行過程首先,我們的數(shù)據(jù)是存放于磁盤/NAS等存儲目錄當中,當需要使用這些數(shù)據(jù)的時候,則要將數(shù)據(jù)從磁盤中讀取出來,經過內存再到三級緩存,然后進入到CPU中。如下圖,數(shù)據(jù)從底部的存儲設備一步一步的被送進入到CPU中。其用于傳輸數(shù)據(jù)的方式:遠程存儲到本地二級存儲走的是網絡通信的方式,而本地存儲的數(shù)據(jù)進入到內存、CPU走的是BUS總線的方式。

進程啟動以后,其數(shù)據(jù)被從磁盤中讀取到內存里緩存,當CPU使用到它的時候,再被通過三級高速緩存送入到CPU中執(zhí)行。那么當這個進程被送入到CPU中運行,是不是就可以一個人獨占CPU資源,直到跑完為止呢?不是的,現(xiàn)代系統(tǒng)設計出了上下文切換的模式,每個進程運行的時候都會分配到了一個時間片,當這個時間片用完,那么當前正在運行的進程就會保留當前的狀態(tài)進入到緩存當中,當再次輪到該進程使用CPU的時候,才會從緩存當中被讀取出來。通過這樣反復的切換,直到進程運行結束。但是我們在使用進程時,為什么沒有進程切換的感覺呢?那是因為CPU的時間片以非常小的時間單位工作著,人們根本感受不到他的切換頻率。在Linux系統(tǒng)中存在著兩個空間,一個是用戶空間,另外一個就是內核空間。用戶空間指的是用戶可以操作和訪問的空間,這個空間通常存放我們用戶自己寫的數(shù)據(jù)等,比如磁盤NAS就是屬于用戶空間。內核空間就是系統(tǒng)內核來操作的一塊空間,這塊空間里面存放系統(tǒng)內核的函數(shù)、接口等,用戶是不能直接操作的。當程序在用戶空間下運行,我們把此時運行的程序的這種狀態(tài)稱為用戶態(tài),而當進程執(zhí)行在內核空間時,這種狀態(tài)稱為內核態(tài)。要想讓程序從用戶態(tài)切換到內核態(tài),有3種方法:1.系統(tǒng)調用 (軟中斷)2.異常(硬中斷) 3.外圍設備的中斷(硬中斷)。二、進程異常會遇到什么?進程在運行過程中不是一開始就知道使用多少內存的,在持續(xù)的運行過程中,會不斷的向系統(tǒng)申請內存。當有應用需要讀寫磁盤數(shù)據(jù)時,由系統(tǒng)把相關數(shù)據(jù)從磁盤讀取到內存,如果物理內存不夠,則把內存中的部分數(shù)據(jù)導入到磁盤,從而把磁盤的部分空間當做虛擬內存使用,這部分被稱為swap。如果給所有應用分配足夠內存后,物理內存還有剩余,Linux會盡量再利用這些空閑內存,以提高整體I/O效率,方法是把這部分剩余內存再劃分為cache和buffer加以利用。如果某個時刻,系統(tǒng)需要更多的內存,則會把cache部分擦除,并把buffer中的內容寫入到磁盤中,然后把這兩部分的空間釋放給系統(tǒng)使用,但是再次讀取cache的內容時,就需要重新從磁盤讀取數(shù)據(jù)。下圖是系統(tǒng)中存在的緩存,當系統(tǒng)需要內存時,就會被釋放空間,然后充當內存使用。

1) Page cache主要用來作為文件系統(tǒng)上的文件數(shù)據(jù)緩存來用,尤其是對當進程對文件有read/write操作的時候。2) Buffer cache主要是用來在系統(tǒng)對塊設備進行讀寫的時候,對塊設備進行數(shù)據(jù)緩存來使用。3) directory cacha的作用是作為目錄緩存,避免經常訪問目錄慢。4) iNode cache則能夠加速訪問文件速度。同一系統(tǒng)內的文件具有唯一識別碼,這個就是iNode號。查找文件的時候會先查詢該文件的iNode號,再根據(jù)iNode號定位到文件位置。一般可以理解為buffer是為了作為數(shù)據(jù)寫入磁盤時的一個緩沖地帶。把分散的寫操作集中進行,減少磁盤碎片和硬盤的反復尋道,從而提高系統(tǒng)性能。而cache經常被用于磁盤的I/O請求上,如果多個進程都有訪問某個文件,于是該文件便被作為cache以方便下次被訪問,這樣可以提高系統(tǒng)性能。

三、當運行一個進程時系統(tǒng)內存不夠會怎么樣?

在工作中會遇到這樣的場景:假設我的服務器就只有32G內存,當前以及使用了28G,而現(xiàn)在需要再運行一個需要10G內存的進程,那么會發(fā)生什么呢?

如果這個進程沒有做什么優(yōu)先級設定,那么這個進程會觸發(fā)OOM,然后被系統(tǒng)kill掉。

什么是OOM?

OOM的全稱是Out of memory Killer,叫內存終結者。在內存過低的情況下,OS(系統(tǒng))會殺掉你的進程。當探測到內存使用不足的時候,OOM會被激活,然后挑選一個進程去終結掉。選擇的目標進程使用的是一套算法,后面會說。

進程在運行過程中是怎么使用內存的呢?Linux允許程序申請比系統(tǒng)可用內存更多的內存,這個機制叫做Overcommit。這樣做是處于優(yōu)化系統(tǒng)考慮,因為不是所有的程序申請了內存就立刻使用的,當開始使用的時候,可能系統(tǒng)已經回收了一些資源,但是當使用overcommit給的內存時,系統(tǒng)還沒有資源的話,這個時候就會觸發(fā)OOM,然后干掉進程。

有的時候在系統(tǒng)內存不是很充足的情況下需要運行一個重要的程序,那么該如何避免此程序被OOM干掉呢?

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

OOM Killer最終是通過/proc/$pid/oom_score這個值來決定哪個進程被干掉。這個值是系統(tǒng)綜合進程的內存消耗量、CPU時間、存活時間和oom_adj計算出來的。消耗內存越多分越高,存活時間越長分越低。總之??偟牟呗跃褪牵簱p失最少的工作,釋放最大的內存同時不傷及無辜的用來很大內存的進程,并且殺掉的進程數(shù)盡量少。另外,Linux在計算進程的內存消耗的時候,會將子進程所耗內存的一半同時計算到父進程中,這樣子進程較多的進程就越容易被殺掉。

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

運行dmesg即可查詢到,或者到/var/log/messages中查看。從網上找了個OOM的圖:

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11076

    瀏覽量

    216998
  • Linux
    +關注

    關注

    87

    文章

    11509

    瀏覽量

    213711
  • 服務器
    +關注

    關注

    13

    文章

    9791

    瀏覽量

    87920
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    請問編譯純rtos到底是選擇Linux+rtos的sdk編譯only rtos還是直接使用rtos sdk?

    編譯純rtos到底是選擇Linux+rtos的sdk編譯only rtos還是直接使用rtos sdk?
    發(fā)表于 07-11 07:22

    PLC到底是什么呢?

    PLC到底是什么呢?
    發(fā)表于 10-10 09:30

    這是到底是什么元件?

    開關電源一個小貼片,在k2717前端。絲印MY還有133字樣。這到底是什么元件?什么原理?
    發(fā)表于 05-26 15:06

    如何評價《Linux就該這么學》這本書?

    的第一篇就是搭建環(huán)境,但是小白真的可能會問虛擬機是個啥?Linux到底是個啥?甚至有些小白同學還不會裝Windows系統(tǒng),或者還沒搞明白計算機這塊“鐵疙瘩”到底是怎么運行起來的,如果你也是連這些問題都沒
    發(fā)表于 10-21 13:01

    請問CKFA到底是什么

    在其他網站看到CKFA,這個到底是什么???具體怎么用???希望能有比較詳細的解釋,謝謝!
    發(fā)表于 08-20 07:18

    這個到底是什么電路

    這個到底是積分電路還是濾波電路還是RC延時電路,我已經頭暈了
    發(fā)表于 01-20 21:56

    QPainter到底是什么?

    QPainter到底是什么?
    發(fā)表于 09-28 06:30

    STM32固件庫到底是什么?

    STM32固件庫到底是什么?
    發(fā)表于 11-30 07:34

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

    set 編譯的是L0 和 L1, ipcamera_hispark_taurus 是L1 liteOS-A內核的,那這個是 ipcamera_hispark_taurus_linux 到底是干嘛用
    發(fā)表于 01-06 10:39

    到底是學STM32還是學嵌入式linux

    01話 題經常有大學生同學糾結:我到底是學STM32還是學嵌入式linux。這個問題很多人都會有自己的看法,今天我試著從多個角度,把我了解到的事實講一下,希望對大家有所啟發(fā)。STM3202STM32
    發(fā)表于 02-07 07:06

    RGB屏到底是什么?

    RGB屏到底是什么?
    發(fā)表于 02-14 07:18

    什么是嵌入式Linux?

    Linux到底是什么呢? 嵌入式linux 是將日益流行的Linux操作系統(tǒng)進行裁剪修改,使之能在嵌入式計算機系統(tǒng)上運行的一種操作系統(tǒng)。簡單來說,是除了電腦之外可以運行程序的設備,將C
    發(fā)表于 10-11 13:47

    Linux到底是怎么樣來的?發(fā)展過程是如何的

    Linux 內核非常龐大,我說的非常大并不是為了嚇唬大家,確實是非常多的代碼,超過 600 萬行的代碼,所以我寫文章介紹 Linux 內核,也不可能每一行代碼去分析,但是我會提煉其中的重點出來,告訴
    的頭像 發(fā)表于 08-11 11:00 ?4087次閱讀

    Linux內核到底是什么應該如何學習

    Linux可以說是近期非?;鸬牧?,有的人想學習linux內核,那他到底是什么呢?
    發(fā)表于 10-06 18:02 ?2099次閱讀

    Linux到底是如何收發(fā)網絡包的

    為了使得多種設備能通過網絡相互通信,和為了解決各種不同設備在網絡互聯(lián)中的兼容性問題,國際標標準化組織制定了開放式系統(tǒng)互聯(lián)通信參考模型(pen System Interconnection Reference Model),也就是 OSI 網絡模型,該模型主要有 7 層,分別是應用層、表示層、會話層、傳輸層、網絡層、數(shù)據(jù)鏈路層以及物理層。
    發(fā)表于 01-03 17:49 ?857次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>到底是</b>如何收發(fā)網絡包的