最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux系統(tǒng)診斷之內(nèi)存基礎(chǔ)深入詳解

 更新時間:2021年03月03日 14:28:13   作者:阿里云云棲號  
這篇文章主要介紹了Linux系統(tǒng)診斷之內(nèi)存基礎(chǔ)深入詳解,雖然是基礎(chǔ)但是列舉的很詳細,有感興趣的同學(xué)可以研究下

1.背景

談及l(fā)inux內(nèi)存,很多時候,我們會關(guān)注free,top等基礎(chǔ)命令。當(dāng)系統(tǒng)遇到異常情況時,內(nèi)存問題的根因追溯,現(xiàn)場診斷時,缺乏深層次的debug能力。本篇幅不做深層討論,能把當(dāng)前系統(tǒng)的問題描述清楚,是每個SRE應(yīng)該具備的最基礎(chǔ)能力。

2. free

2.1 free命令原理

free是通過查看 /proc/meminfo 來獲取內(nèi)存的使用情況。但是 /proc/meminfo 這個文件又是怎么來的?我們先了解下 /proc 目錄:

  • /proc 是一個虛擬文件系統(tǒng),該目錄下的所有文件都是偽文件,該類文件只存在于內(nèi)存中,并不占用空間——使用 du -sh 即可驗證,該模具路下的磁盤占用都是0。
  • /proc 下的所有文件都是內(nèi)核調(diào)用proc_create() 接口來創(chuàng)建的虛擬條目。
  • /proc 中的文件,大多反饋系統(tǒng)信息的實時情況(進程、內(nèi)存、cpu、設(shè)備信息等)。

結(jié)論: /proc/meminfo 是 /proc 文件系統(tǒng)下保存你內(nèi)存相關(guān)信息的"偽文件"。

2.2 命令輸出簡介

每個發(fā)行版輸出都有一定差異,我們以debian8 4.19.x發(fā)行版為例。

root@4f996feeb851:~# free -m
  total used free shared buffers cached
Mem:  1991 1909  81  4 155 836
-/+ buffers/cache: 917 1073
Swap:  1023  1 1022

大部分的命令輸出意思,大家可以在man文檔中找到解析,這里不做贅述。

  • used: 已使用的內(nèi)存 used = total - free -buffers -cached
  • free: 未使用的內(nèi)存 memFree & swapFree in /proc/meminfo
  • shared: tmpfs使用的內(nèi)存 shmem in /proc/meminfo
  • buffers:被內(nèi)核緩沖去使用的內(nèi)存
  • cached: 被頁緩存和slabs使用的內(nèi)存
  • buffers/cache: 表示buffers和cache的總和
  • swap: 交換分區(qū)的使用量

2.3 buffer和cache會使用內(nèi)存嗎?

答案是肯定的,先來了解下buffer和cache。

  • cache(緩存)官方定義是用來彌補高速設(shè)備和低速設(shè)備之間的訪問速度不匹配而預(yù)留的一段空間,用來加快資源的訪問。 簡單講就是讀的更快。
  • buffer(緩沖)是為了做資源寫入整形,計算機遇到大量的“小規(guī)模IO”時,會將其整形為少量的“大規(guī)模IO”,降低寫入次數(shù)。從而達到“寫資源”合理利用的效果。

然而,free命令所展示的buffer和cache 有點狹義的意思——free展示的buffer表示 塊設(shè)備所占用的緩存 、free展示的cache表示普通文件占用的the page cache(緩存頁) 。

總之,buffer和cache使用的內(nèi)存都是用來加速Linux讀寫性能,如果有新的進程需要內(nèi)存,系統(tǒng)會將buffer和cache占用的內(nèi)存回收,并重新分配給進程使用。

2.4 其他內(nèi)存概念

RSS & VSZ & PSS & USS

  • RSS(Resident Set Size):進程實際使用的物理內(nèi)存大小,包括sharedMem。
  • VSZ(Virtual Memory Size):進程所有能夠訪問到的內(nèi)存大小,包括因為缺頁中斷,被swap出去的內(nèi)存大小,以及sharedMem。
  • PSS(Proportional Set Size):按照比例將內(nèi)存的大小加到RSS中。
  • USS(Unique Set Size):進程獨占的物理內(nèi)存大小。

usedMem分為 active & inactive

  • active:表示這部分的內(nèi)存正在被某個特定的進程使用,不太可能被收回。
  • inactive:表示這部分內(nèi)存是被分配到某個不在running狀態(tài)的進程,有可能會被回收。

Linux會維護一個LRU List用來管理活動頁和非活動頁的回收。 簡單講, 越接近該List的末尾,該頁面被回收的概率就越大,反之,越接近列首,則更不易被回收。 linux內(nèi)核會維護兩類LRUList——active list和inactive list,剛訪問過的頁面放入active list,長時間未訪問的頁面放入inactive list,內(nèi)核線程kswapd會定期將active list中的頁面移至 inactive list中。

如果系統(tǒng)的inactive的內(nèi)存過大,可以通過如下操作對其做回收。
sync; echo 3 > /proc/sys/vm/drop_caches

3. 虛擬內(nèi)存

現(xiàn)代x86系統(tǒng),計算機能夠使用的內(nèi)存會大于其物理內(nèi)存的上限,依靠的就是虛擬內(nèi)存機制。Linux支持虛擬內(nèi)存機制和實模式機制。

實模式下,計算機會直接申請物理內(nèi)存, 虛擬內(nèi)存機制下,系統(tǒng)會把磁盤當(dāng)成內(nèi)存的擴展,已增加可使用的內(nèi)存大小。并通過映射map的機制,來保存和物理內(nèi)存的真實對應(yīng)關(guān)系。

在磁盤和內(nèi)存之間傳送Page的活動叫做swapping或者頁面調(diào)度(paging),被用作虛擬內(nèi)存的磁盤分區(qū)稱為swap。

可以通過在線添加swap的方式臨時緩解內(nèi)存不足的問題,但一般不能直接作在線減少swap的操作,很有可能導(dǎo)致進程的crash。具體swap配置方式見5.1swap相關(guān)配置。

4. OOM

1.What is OOM?

Out Of Memory Killer 是 Linux 的一種系統(tǒng)保護機制,在系統(tǒng)內(nèi)存緊張時,kill掉某些進程防止系統(tǒng)卡死。系統(tǒng)通過打分機制,來實施對進程的殺死操作。默認(rèn)機制是通過掃描所有進程的內(nèi)存占用,cpu占用等因素,然后打分  (badness),分?jǐn)?shù)越高,進程被kill的優(yōu)先級就越高。

2.哪些行為會讓系統(tǒng)對進程進行打分?

  • 進程使用fork(2)調(diào)用,創(chuàng)建眾多子進程時,會加分(+)
  • 進程已經(jīng)運行了很長時間,或者和使用了大量的CPU時間,會減分(-)
  • 進程的nice值如果比較低,會加分(+)
  • 進程如果是特權(quán)進程(privileged),會減分(-)
  • 進程如果對硬件設(shè)備進行直接訪問,會減分(-)

3.在哪兒可以看到進程的打分?

/proc/<pid>/oom_score

4.手動調(diào)整分?jǐn)?shù)

/proc//oom_adj 該文件可以用于調(diào)整在oom發(fā)生時,哪些進程應(yīng)該被kill,范圍-16 -- +15 ,默認(rèn)值為0,  

特殊值-17:表示進程永遠不會被kill。

5.我怎么知道系統(tǒng)有沒有觸發(fā)過OOM?

/var/log/messages 、 /var/log/syslog 系統(tǒng)日志或者 dmesg 系統(tǒng)日志診斷工具等都能夠找到

5. 內(nèi)存相關(guān)配置

5.1 swap相關(guān)配置

通過調(diào)節(jié)系統(tǒng)參數(shù),來告訴計算機使用swap分區(qū)的權(quán)重

1. 簡介
swappiness范圍0-100,默認(rèn)60
0: 表示禁止使用swap
60: 默認(rèn)
100: 瘋狂使用swap
 
2. 操作方法
# sysctl vm.swappiness=VALUE
# sysctl vm.swappiness=20
或者
# echo VALUE > /proc/sys/vm/swappiness
# echo 30 > /proc/sys/vm/swappiness

通過在線增加swap分區(qū)大小,臨時控制內(nèi)存泄露,內(nèi)存不夠用等異常。

1. 需要root用戶
2. 創(chuàng)建存儲文件
# dd if=/dev/zero of=/home/swap2G bs=1024 count=2M
3. 安全設(shè)置
# chown root:root /home/swap2G
# chmod 0600 /home/swap2G
4. 創(chuàng)建liunx交換分區(qū)
# mkswap /home/swap2G
5. enable 交換分區(qū)
# swapon /home/swap2G
6. 更新fstab文件【注意: 部分操作系統(tǒng)不需要】
# vim /etc/fstab
/home/swap2G none swap sw 0 0
7. 檢查是否生效
#free -m
8. 卸載swap分區(qū)
# swapoff /home/swap2G

5.2 緩存相關(guān)

sync; echo 3 > /proc/sys/vm/drop_caches
 
0:不釋放
1:釋放頁緩存
2:釋放 dentries 和 inodes
3:釋放所有緩存

5.3 OOM相關(guān)

  • vm.panic_on_oom
  • 是否在觸發(fā) oom 機制時觸發(fā) kernel panic。0表示關(guān)閉(推薦),1表示打開。 kernel panic是指計算機遇到了致命的錯誤,并且他不知道該怎么處理時的一種動作——可以類比windows的藍屏。 我們當(dāng)然不希望每次計算機在oom時就直接藍屏。推薦設(shè)置為0
  • vm.overcommit_kbytes:
  • 用于限制進程能夠申請的最大內(nèi)存,0表示不設(shè)置,如果設(shè)置其他數(shù)值,比如400,則進程能夠申請到的最大內(nèi)存為 swap+400kBytes
  • vm.overcommit_ratio:
  • 定義了進程可以使用的最大內(nèi)存(百分比模式),默認(rèn)為50。表示配置50之后,進程不允許申請超過 swap + 50% * 物理內(nèi)存總量 以上的內(nèi)存
  • vm.oom_kill_allocating_task (Linux 2.6.24+支持)
  • 這在內(nèi)存不足的情況下啟用或禁用殺死OOM觸發(fā)任務(wù)。0表示禁用(默認(rèn)),1表示啟用??梢岳斫鉃閛om機制的開關(guān),默認(rèn)為禁用——表示要讓oom觸發(fā)器正常執(zhí)行。
  • 其他有興趣的話,可以自行man proc

到此這篇關(guān)于Linux系統(tǒng)診斷之內(nèi)存基礎(chǔ)深入詳解的文章就介紹到這了,更多相關(guān)Linux系統(tǒng)診斷之內(nèi)存基礎(chǔ)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解gitBash中使用Linux中的tree命令

    詳解gitBash中使用Linux中的tree命令

    最近很多同學(xué)問小編關(guān)于Linux命令的問題,小編今天主要介紹Linux里的tree命令,tree命令是一種遞歸目錄列表顯示命令,使用該命令可以以樹狀圖的形式列出一個目錄下所有文件內(nèi)容,本文給大家介紹gitBash中使用Linux中的tree命令,一起看看吧
    2023-11-11
  • 簡化shell終端命令輸入的腳本式快捷鍵工具

    簡化shell終端命令輸入的腳本式快捷鍵工具

    這篇文章主要介紹了簡化shell終端命令輸入的腳本式快捷鍵工具,這是一個shell腳本寫的簡化shell命令輸入的快捷鍵工具,需要的朋友可以參考下
    2015-03-03
  • shell中長命令的換行處理方法示例

    shell中長命令的換行處理方法示例

    這篇文章主要給大家介紹了關(guān)于shell中長命令的換行處理方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用shell具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Bash Shell 注釋多行的幾種方法

    Bash Shell 注釋多行的幾種方法

    這篇文章主要介紹了Bash Shell注釋多行的幾種方法,需要的朋友可以參考下
    2014-12-12
  • 詳解linux下利用crontab創(chuàng)建定時任務(wù)

    詳解linux下利用crontab創(chuàng)建定時任務(wù)

    這篇文章主要介紹了linux下利用crontab創(chuàng)建定時任務(wù)的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • linux Nginx 日志腳本

    linux Nginx 日志腳本

    這篇文章主要介紹了nginx日志切割腳本、nginx日志分析腳本等,需要的朋友可以參考下
    2013-11-11
  • shell編程跨服務(wù)器備份文件

    shell編程跨服務(wù)器備份文件

    這篇文章主要介紹了shell編程跨服務(wù)器備份文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • shell腳本配合zabbix實現(xiàn)tomcat的故障自愈功能

    shell腳本配合zabbix實現(xiàn)tomcat的故障自愈功能

    這篇文章主要介紹了shell腳本配合zabbix實現(xiàn)tomcat的故障自愈,服務(wù)實現(xiàn)自愈的方式有通過shell腳本+定時任務(wù)的方式,藍鯨Pass故障自愈平臺,shell腳本+zabbix觸發(fā)器動作,本文給大家詳細介紹,需要的朋友可以參考下
    2022-03-03
  • Shell正則表達式(元字符)的使用

    Shell正則表達式(元字符)的使用

    元字符指的是能夠被shell解釋的特殊字符,每個特殊字符都有其特殊含義,本文主要介紹了Shell正則表達式(元字符)的使用,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Shell去除空行的4種方法

    Shell去除空行的4種方法

    這篇文章主要介紹了Shell去除文件中空行的4種方法,本文講解了使用tr命令、sed命令、awk命令、grep命令等4種命令實現(xiàn),需要的朋友可以參考下
    2014-11-11

最新評論

乐山市| 勐海县| 开远市| 黎城县| 青铜峡市| 宁化县| 宽甸| 肇州县| 大渡口区| 招远市| 开封市| 乐陵市| 仙居县| 枣阳市| 长丰县| 吉木乃县| 盐亭县| 南丰县| 定兴县| 白银市| 六枝特区| 华蓥市| 科技| 团风县| 合作市| 沙洋县| 祁连县| 天镇县| 安徽省| 尼勒克县| 即墨市| 化州市| 维西| 兴安县| 松潘县| 定结县| 镇雄县| 花莲县| 神池县| 吴旗县| 巫山县|