婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > Linux系統(tǒng)診斷之內(nèi)存基礎(chǔ)深入詳解

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

熱門標(biāo)簽:地圖標(biāo)注審核周期 黑暗之魂3地圖標(biāo)注 合肥電銷外呼系統(tǒng)供應(yīng)商 電話機(jī)器人對(duì)家居行業(yè)幫助大嗎 AI智能電銷機(jī)器人壞處 如何申請(qǐng)400的電話呀 蘭州電銷機(jī)器人加盟 電商外呼系統(tǒng)排名 沈陽(yáng)ai電銷智能機(jī)器人

1.背景

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

2. free

2.1 free命令原理

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

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

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

2.2 命令輸出簡(jiǎn)介

每個(gè)發(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: 被頁(yè)緩存和slabs使用的內(nèi)存
  • buffers/cache: 表示buffers和cache的總和
  • swap: 交換分區(qū)的使用量

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

答案是肯定的,先來(lái)了解下buffer和cache。

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

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

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

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

RSS VSZ PSS USS

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

usedMem分為 active inactive

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

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

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

3. 虛擬內(nèi)存

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

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

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

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

4. OOM

1.What is OOM?

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

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

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

3.在哪兒可以看到進(jìn)程的打分?

/proc/pid>/oom_score

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

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

特殊值-17:表示進(jìn)程永遠(yuǎn)不會(huì)被kill。

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

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

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

5.1 swap相關(guān)配置

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

1. 簡(jiǎn)介
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

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

1. 需要root用戶
2. 創(chuàng)建存儲(chǔ)文件
# 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:釋放頁(yè)緩存
2:釋放 dentries 和 inodes
3:釋放所有緩存

5.3 OOM相關(guān)

  • vm.panic_on_oom
  • 是否在觸發(fā) oom 機(jī)制時(shí)觸發(fā) kernel panic。0表示關(guān)閉(推薦),1表示打開(kāi)。 kernel panic是指計(jì)算機(jī)遇到了致命的錯(cuò)誤,并且他不知道該怎么處理時(shí)的一種動(dòng)作——可以類比windows的藍(lán)屏。 我們當(dāng)然不希望每次計(jì)算機(jī)在oom時(shí)就直接藍(lán)屏。推薦設(shè)置為0
  • vm.overcommit_kbytes:
  • 用于限制進(jìn)程能夠申請(qǐng)的最大內(nèi)存,0表示不設(shè)置,如果設(shè)置其他數(shù)值,比如400,則進(jìn)程能夠申請(qǐng)到的最大內(nèi)存為 swap+400kBytes
  • vm.overcommit_ratio:
  • 定義了進(jìn)程可以使用的最大內(nèi)存(百分比模式),默認(rèn)為50。表示配置50之后,進(jìn)程不允許申請(qǐng)超過(guò) swap + 50% * 物理內(nèi)存總量 以上的內(nèi)存
  • vm.oom_kill_allocating_task (Linux 2.6.24+支持)
  • 這在內(nèi)存不足的情況下啟用或禁用殺死OOM觸發(fā)任務(wù)。0表示禁用(默認(rèn)),1表示啟用。可以理解為oom機(jī)制的開(kāi)關(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Linux設(shè)置虛擬內(nèi)存的教學(xué)與實(shí)戰(zhàn)教程
  • Linux 下如何檢查內(nèi)存使用率
  • Linux系統(tǒng)為什么要吃掉我的“內(nèi)存”
  • 解決Linux system v 共享內(nèi)存問(wèn)題
  • Linux系統(tǒng)查看CPU、機(jī)器型號(hào)、內(nèi)存等信息
  • Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)存管理筆記整理
  • Linux中大內(nèi)存頁(yè)Oracle數(shù)據(jù)庫(kù)優(yōu)化的方法
  • 淺談Linux的虛擬內(nèi)存

標(biāo)簽:淮南 常州 黔南 隴南 黔南 河池 河北 通遼

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux系統(tǒng)診斷之內(nèi)存基礎(chǔ)深入詳解》,本文關(guān)鍵詞  Linux,系統(tǒng),診斷,之,內(nèi)存,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Linux系統(tǒng)診斷之內(nèi)存基礎(chǔ)深入詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Linux系統(tǒng)診斷之內(nèi)存基礎(chǔ)深入詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 新源县| 多伦县| 革吉县| 会同县| 福安市| 舞阳县| 阿勒泰市| 河源市| 荥经县| 汽车| 康保县| 安平县| 揭西县| 塔河县| 江北区| 林西县| 百色市| 当雄县| 民勤县| 阿瓦提县| 蓬莱市| 凌源市| 登封市| 鄯善县| 遂平县| 永嘉县| 内乡县| 太仓市| 华宁县| 抚顺市| 永胜县| 离岛区| 双流县| 离岛区| 石屏县| 离岛区| 丰台区| 古交市| 保定市| 磴口县| 天柱县|