国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

linux 性能優(yōu)化-內(nèi)存優(yōu)化

這篇具有很好參考價(jià)值的文章主要介紹了linux 性能優(yōu)化-內(nèi)存優(yōu)化。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

CPU 管理一樣,內(nèi)存管理也是操作系統(tǒng)最核心的功能之一。內(nèi)存主要用來(lái)存儲(chǔ)系統(tǒng)和應(yīng) 用程序的指令、數(shù)據(jù)、緩存等。

1.內(nèi)存原理

1.1.內(nèi)存映射

1.1.1.日常生活常說(shuō)的內(nèi)存是什么?

  • 我的筆記本電腦內(nèi)存就是 8GB 的
  • 這個(gè)內(nèi)存其實(shí)是物理內(nèi)存
  • 物理內(nèi)存也稱(chēng)為主存,大多數(shù)計(jì)算機(jī)用的主存都是動(dòng)態(tài)隨機(jī)訪問(wèn)內(nèi)存(DRAM)

1.1.2.虛擬地址空間

Linux 內(nèi)核給每個(gè)進(jìn)程都提供了一個(gè)獨(dú)立的虛擬地址空間,并且這個(gè)地址空間是連續(xù)的。 這樣,進(jìn)程就可以很方便地訪問(wèn)內(nèi)存,更確切地說(shuō)是訪問(wèn)虛擬內(nèi)存。

虛擬地址空間內(nèi)部

  • 虛擬地址空間的內(nèi)部又被分為內(nèi)核空間和用戶(hù)空間兩部分
  • 不同字長(zhǎng)(單個(gè) CPU 指令可以處理數(shù)據(jù)的最大長(zhǎng)度)的處理器,地址空間的范圍也不同

比如最常見(jiàn)的 32 位和 64 位,如下所示:

linux 性能優(yōu)化-內(nèi)存優(yōu)化,運(yùn)維,linux,性能優(yōu)化,運(yùn)維

  • 32 位系統(tǒng)的內(nèi)核空間占用 1G,位于最高處,剩下的 3G 是用戶(hù)空間
  • 而 64 位系統(tǒng)的內(nèi)核空間和用戶(hù)空間都是 128T,分別占據(jù)整個(gè)內(nèi)存空間的最高和最低處,剩下的中間部分是未定義的

1.1.3.進(jìn)程的用戶(hù)態(tài)和內(nèi)核態(tài)

進(jìn)程在用戶(hù)態(tài)時(shí),只能訪問(wèn)用戶(hù)空間內(nèi)存;只有進(jìn)入內(nèi)核態(tài)后,才可以訪問(wèn)內(nèi)核空間內(nèi)存。雖然每個(gè)進(jìn)程地址空間都包含了內(nèi)核空間,但這些內(nèi)核空間,其實(shí)關(guān)聯(lián)的都是相同的物理內(nèi)存。這樣,進(jìn)程切換到內(nèi)核態(tài)后,就可以很方便地訪問(wèn)內(nèi)核空間內(nèi)存。

1.1.4.內(nèi)存映射

既然每個(gè)進(jìn)程都有一個(gè)這么大的地址空間,那么所有進(jìn)程的虛擬內(nèi)存加起來(lái),自然要比實(shí)際的物理內(nèi)存大得多。

所以,并不是所有的虛擬內(nèi)存都會(huì)分配物理內(nèi)存,只有那些實(shí)際使用的虛擬內(nèi)存才分配物理內(nèi)存,并且分配后的物理內(nèi)存,是通過(guò)內(nèi)存映射來(lái)管理的。

內(nèi)存映射,其實(shí)就是將虛擬內(nèi)存地址映射到物理內(nèi)存地址。為了完成內(nèi)存映射,內(nèi)核為每個(gè)進(jìn)程都維護(hù)了一張頁(yè)

表,記錄虛擬地址物理地址的映射關(guān)系,如下圖所示:

linux 性能優(yōu)化-內(nèi)存優(yōu)化,運(yùn)維,linux,性能優(yōu)化,運(yùn)維

  • 頁(yè)表實(shí)際上存儲(chǔ)在 CPU 的內(nèi)存管理單元 MMU 中
  • 正常情況下,處理器就可以直接通過(guò)硬件,找出要訪問(wèn)的內(nèi)存
  • 在頁(yè)表的映射下,進(jìn)程就可以通過(guò)虛擬地址來(lái)訪問(wèn)物理內(nèi)存

1.2.虛擬內(nèi)存空間分布

以 32 位系統(tǒng)為例,如下圖所示:

linux 性能優(yōu)化-內(nèi)存優(yōu)化,運(yùn)維,linux,性能優(yōu)化,運(yùn)維

通過(guò)這張圖你可以看到,用戶(hù)空間內(nèi)存,從低到高分別是五種不同的內(nèi)存段。

  • 只讀段,包括代碼和常量等;
  • 數(shù)據(jù)段,包括全局變量等;
  • 堆,包括動(dòng)態(tài)分配的內(nèi)存,從低地址開(kāi)始向上增長(zhǎng);
  • 文件映射段,包括動(dòng)態(tài)庫(kù)、共享內(nèi)存等,從高地址開(kāi)始向下增長(zhǎng);
  • 棧,包括局部變量和函數(shù)調(diào)用的上下文等。棧的大小是固定的,一般是 8MB

在這五個(gè)內(nèi)存段中,堆和文件映射段的內(nèi)存是動(dòng)態(tài)分配的。

1.3 SWAP運(yùn)行原理

Swap 是把一塊磁盤(pán)空間或者一個(gè)本地文件,當(dāng)成內(nèi)存來(lái)使用。它包括換出換入兩個(gè)過(guò)程。

  • 換出,就是把進(jìn)程暫時(shí)不用的內(nèi)存數(shù)據(jù)存儲(chǔ)到磁盤(pán)中,并釋放這些數(shù)據(jù)占用的內(nèi)存。
  • 換入,則是在進(jìn)程再次訪問(wèn)這些內(nèi)存的時(shí)候,把它們從磁盤(pán)讀到內(nèi)存中來(lái)。

一個(gè)很典型的場(chǎng)景就是,即使內(nèi)存不足時(shí),有些應(yīng)用程序也并不想被 OOM 殺死,而是希望能緩一段時(shí)間,等待人工介入,或者等系統(tǒng)自動(dòng)釋放其他進(jìn)程的內(nèi)存,再分配給它。除此之外,我們常見(jiàn)的筆記本電腦的休眠和快速開(kāi)機(jī)的功能,也基于 Swap 。休眠時(shí),把系統(tǒng)的內(nèi)存存入磁盤(pán),這樣等到再次開(kāi)機(jī)時(shí),只要從磁盤(pán)中加載內(nèi)存就可以這樣就省去了很多應(yīng)用程序的初始化過(guò)程,加快了開(kāi)機(jī)速度。話說(shuō)回來(lái),既然 Swap 是為了回收內(nèi)存,那么** Linux**到底在什么時(shí)候需要回收內(nèi)存呢?前面一直在說(shuō)內(nèi)存資源緊張,又該怎么來(lái)衡量?jī)?nèi)存是不是緊張呢?

一個(gè)最容易想到的場(chǎng)景就是,有新的大塊內(nèi)存分配請(qǐng)求,但是剩余內(nèi)存不足。這個(gè)時(shí)候系統(tǒng)就需要回收一部分內(nèi)

存,進(jìn)而盡可能地滿足新內(nèi)存請(qǐng)求。這個(gè)過(guò)程通常被稱(chēng)為 直接內(nèi)存回收 。

除了直接內(nèi)存回收,還有一個(gè)專(zhuān)門(mén)的內(nèi)核線程用來(lái) 定期回收內(nèi)存 ,也就是 kswapd0。為了衡量?jī)?nèi)存的使用情況,

kswapd0 定義了三個(gè)內(nèi)存閾值(watermark,也稱(chēng)為水位),分別是頁(yè)最小閾值(pages_min)、頁(yè)低閾值

(pages_low)和頁(yè)高閾值(pages_high)。剩余內(nèi)存,則使用 pages_free 表示

linux 性能優(yōu)化-內(nèi)存優(yōu)化,運(yùn)維,linux,性能優(yōu)化,運(yùn)維

kswapd0 定期掃描內(nèi)存的使用情況,并根據(jù)剩余內(nèi)存落在這三個(gè)閾值的空間位置,進(jìn)行內(nèi)存的回收操作。

  • 剩余內(nèi)存小于頁(yè)最小閾值,說(shuō)明進(jìn)程可用內(nèi)存都耗盡了,只有內(nèi)核才可以分配內(nèi)存
  • 剩余內(nèi)存落在頁(yè)最小閾值頁(yè)低閾值中間,說(shuō)明內(nèi)存壓力比較大,剩余內(nèi)存不多了。這時(shí) kswapd0 會(huì)執(zhí)行內(nèi)

存回收,直到剩余內(nèi)存大于高閾值為止

  • 剩余內(nèi)存落在頁(yè)低閾值和頁(yè)高閾值中間,說(shuō)明內(nèi)存有一定壓力,但還可以滿足新內(nèi)存請(qǐng)求。
  • 剩余內(nèi)存大于頁(yè)高閾值,說(shuō)明剩余內(nèi)存比較多,沒(méi)有內(nèi)存壓力。

/proc/sys/vm/min_free_kbytes 來(lái)間接設(shè)置。min_free_kbytes 設(shè)置了頁(yè)最小閾值,而其他兩個(gè)閾值,都是根據(jù)頁(yè)最

小閾值計(jì)算生成的,計(jì)算方法如下 :

pages_low = pages_min*5/4
pages_high = pages_min*3/2

2.內(nèi)存性能統(tǒng)計(jì)信息

2.1.系統(tǒng)內(nèi)存使用量

2.2.1內(nèi)存的使用情況

顯示系統(tǒng)內(nèi)存情況

[root@centos7-2 ~]# free
total used free shared buff/cache available
Mem: 999720 550508 283544 6844 165668 279124
Swap: 2097148 0 2097148

linux 性能優(yōu)化-內(nèi)存優(yōu)化,運(yùn)維,linux,性能優(yōu)化,運(yùn)維

所有數(shù)值默認(rèn)都是以字節(jié)(kb)為單位

  • 第一行 Mem:物理內(nèi)存
  • 第二行 Swap:交換分區(qū)

你可以看到,free 輸出的是一個(gè)表格,其中的數(shù)值都默認(rèn)以字節(jié)為單位。表格總共有兩行 六列,這兩行分別是物理

內(nèi)存 Mem 和交換分區(qū) Swap 的使用情況,而六列中,每列數(shù)據(jù) 的含義分別為:

  • 第一列,total 是總內(nèi)存大小;
  • 第二列,used 是已使用內(nèi)存的大小,包含了共享內(nèi)存;
  • 第三列,free 是未使用內(nèi)存的大??;
  • 第四列,shared 是共享內(nèi)存的大小;
  • 第五列,buw /cache 是緩存和緩沖區(qū)的大??;
  • 最后一列,available 是新進(jìn)程可用內(nèi)存的大小。

2.2.free命令參數(shù)

簡(jiǎn)寫(xiě) 完成寫(xiě)法 作用
-b –bytes 所有數(shù)值單位是bytes
-k –kibi 所有數(shù)值單位是kb
-m –mebi 所有數(shù)值單位是mb
-g –gibi 所有數(shù)值單位是gb
-h –human 人性化輸出
-W –wide 將buff和cache拆分為單獨(dú)的兩個(gè)列顯示
-C –count 統(tǒng)計(jì)次數(shù),默認(rèn)是1次
-l –lohi 顯示詳細(xì)的低內(nèi)存和高內(nèi)存統(tǒng)計(jì)信息
-S –seconds 每次統(tǒng)計(jì)數(shù)據(jù)間隔時(shí)間
-t –total 添加一行顯示數(shù)據(jù)總和
–help
幫助文檔
-V –version 版本號(hào)

舉例:

每隔 2s 輸出一次統(tǒng)計(jì)信息,總共輸出 2 次,并且人性化輸出所有數(shù)值

[root@centos7-2 ~]# free -h -c 2 -s 2
total used free shared buff/cache available
Mem: 976M 537M 276M 6.7M 161M 272M
Swap: 2.0G 0B 2.0G
total used free shared buff/cache available
Mem: 976M 537M 276M 6.7M 161M 272M
Swap: 2.0G 0B 2.0G
[root@centos7-2 ~]#

?

2.3.top指令

[root@centos7-2 ~]# top
top - 11:49:39 up 50 min, 1 user, load average: 0.12, 0.08, 0.06
Tasks: 104 total, 2 running, 102 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 999720 total, 283960 free, 549672 used, 166088 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 279848 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1554 root 20 0 157836 2180 1540 R 0.3 0.2 0:00.05 top
1 root 20 0 125248 3716 2508 S 0.0 0.4 0:02.84 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u256:0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.03 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 R 0.0 0.0 0:00.97 rcu_sched
10 root rt 0 0 0 0 S 0.0 0.0 0:00.07 watchdog/0
11 root rt 0 0 0 0 S 0.0 0.0 0:00.02 watchdog/1
12 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/1
13 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/1
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd
20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
24 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md

linux 性能優(yōu)化-內(nèi)存優(yōu)化,運(yùn)維,linux,性能優(yōu)化,運(yùn)維
第一行:輸出系統(tǒng)任務(wù)隊(duì)列信息
linux 性能優(yōu)化-內(nèi)存優(yōu)化,運(yùn)維,linux,性能優(yōu)化,運(yùn)維

  • 11:49:39:系統(tǒng)當(dāng)前時(shí)間
  • up 50 min:系統(tǒng)開(kāi)機(jī)后到現(xiàn)在的總運(yùn)行時(shí)間
  • 1 user:當(dāng)前登錄用戶(hù)數(shù)
  • load average: 0.12, 0.08, 0.06:系統(tǒng)負(fù)載,系統(tǒng)運(yùn)行隊(duì)列的平均利用率,可認(rèn)為是可運(yùn)行進(jìn)程的平均數(shù);三個(gè)數(shù)值分別為 1分鐘、5分鐘、15分鐘前到現(xiàn)在的平均值

第二行:任務(wù)進(jìn)程信息
linux 性能優(yōu)化-內(nèi)存優(yōu)化,運(yùn)維,linux,性能優(yōu)化,運(yùn)維

  • total:系統(tǒng)全部進(jìn)程的數(shù)量
  • running:運(yùn)行狀態(tài)的進(jìn)程數(shù)量
  • sleeping:睡眠狀態(tài)的進(jìn)程數(shù)量
  • stoped:停止?fàn)顟B(tài)的進(jìn)程數(shù)量
  • zombie:僵尸進(jìn)程數(shù)量

第三行:CPU信息
linux 性能優(yōu)化-內(nèi)存優(yōu)化,運(yùn)維,linux,性能優(yōu)化,運(yùn)維

  • us:用戶(hù)空間占用CPU百分比
  • sy:內(nèi)核空間占用CPU百分比
  • ni:已調(diào)整優(yōu)先級(jí)的用戶(hù)進(jìn)程的CPU百分比
  • id:空閑CPU百分比,越低說(shuō)明CPU使用率越高
  • wa:等待IO完成的CPU百分比
  • hi:處理硬件中斷的占用CPU百分比
  • si:處理軟中斷占用CPU百分比
  • st:虛擬機(jī)占用CPU百分比

第四行:物理內(nèi)存信息
linux 性能優(yōu)化-內(nèi)存優(yōu)化,運(yùn)維,linux,性能優(yōu)化,運(yùn)維
以下內(nèi)存單位均為**MB **

  • total:物理內(nèi)存總量
  • free:空閑內(nèi)存總量
  • used:使用中內(nèi)存總量
  • buw /cache:用于內(nèi)核緩存的內(nèi)存量

第五行:交換區(qū)內(nèi)存信息
linux 性能優(yōu)化-內(nèi)存優(yōu)化,運(yùn)維,linux,性能優(yōu)化,運(yùn)維

  • total:交換區(qū)總量
  • free:空閑交換區(qū)總量
  • used:使用的交換區(qū)總量
  • avail Mem:可用交換區(qū)總量

**注:**如果used不斷在變化, 說(shuō)明內(nèi)核在不斷進(jìn)行內(nèi)存和swap的數(shù)據(jù)交換,說(shuō)明內(nèi)存真的不夠用了

進(jìn)行信息區(qū)
linux 性能優(yōu)化-內(nèi)存優(yōu)化,運(yùn)維,linux,性能優(yōu)化,運(yùn)維

  • PID:進(jìn)程號(hào)
  • USER:運(yùn)行進(jìn)程的用戶(hù)
  • PR:優(yōu)先級(jí)
  • NI:nice值。負(fù)值表示高優(yōu)先級(jí),正值表示低優(yōu)先級(jí)
  • **VIRT 是進(jìn)程虛擬內(nèi)存的大小,只要是進(jìn)程申請(qǐng)過(guò)的內(nèi)存,即便還沒(méi)有真正分配物理內(nèi)存,也會(huì)計(jì)算在內(nèi)。 **
  • **RES 是常駐內(nèi)存的大小,也就是進(jìn)程實(shí)際使用的物理內(nèi)存大小,但不包括 Swap 和共享 內(nèi)存。 **
  • **SHR 是共享內(nèi)存的大小,比如與其他進(jìn)程共同使用的共享內(nèi)存、加載的動(dòng)態(tài)鏈接庫(kù)以及 程序的代碼段等。 **
  • S:進(jìn)程狀態(tài) (R運(yùn)行狀態(tài) S睡眠狀態(tài) D不可中斷狀態(tài) T跟蹤/停止 Z僵尸進(jìn)程)
  • %CPU:CPU 使用率
  • **%MEM:進(jìn)程使用武力內(nèi)存占系統(tǒng)總內(nèi)存的百分比 **
  • TIME+:上次啟動(dòng)后至今的總運(yùn)行時(shí)間
  • COMMAND:命令名or命令行

在查看 top 輸出時(shí),你還要注意兩點(diǎn)。
第一,虛擬內(nèi)存通常并不會(huì)全部分配物理內(nèi)存。從上面的輸出,你可以發(fā)現(xiàn)每個(gè)進(jìn)程的虛 擬內(nèi)存都比常駐內(nèi)存大得多

第二,共享內(nèi)存SHR并不一定是共享的,比方說(shuō),程序的代碼段、非共享的動(dòng)態(tài)鏈接庫(kù),也都算在 SHR里。當(dāng)然SHR也包括了進(jìn)程間真正共享的內(nèi)存。所以在計(jì)算多個(gè)進(jìn)程的內(nèi)存使用時(shí),不要把所有進(jìn)程的 SHR 直接相加得出結(jié)果。

2.4.緩存與緩沖區(qū)命中率

緩存是BufferCache兩部分的總和BufferCache 的設(shè)計(jì)目的,是為了提升系統(tǒng)的 I/O 性能。它們利用內(nèi)存充當(dāng)起慢速磁盤(pán)與快速 CPU 之間的橋梁,可以加速 I/O 的訪問(wèn)速度。BufferCache 分別緩存的是對(duì)磁盤(pán)和文件系統(tǒng)的讀寫(xiě)數(shù)據(jù)。

[root@centos7-2 ~]# free
			total used 	free 	 shared buff/cache available
Mem: 999720 542500 291348  6876  165872      290028
Swap: 2097148 0    2097148

字面意思,Buffer是緩存區(qū),Cache 是緩存,兩者都是數(shù)據(jù)在內(nèi)存中的臨時(shí)存儲(chǔ)

2.4.1.Buffer 和 Cache 的區(qū)別

Buffer:內(nèi)核緩沖區(qū)用到的內(nèi)存,對(duì)應(yīng)的是 /proc/meminfo 中的Buffer值;
Cache: 內(nèi)核頁(yè)緩存和 Slab 用到的內(nèi)存,對(duì)應(yīng)的是 /proc/meminfo 中的 **Cached **與 Slab之和;
Buffer

  • 對(duì)原始磁盤(pán)塊的臨時(shí)存儲(chǔ),也就是用來(lái)緩存磁盤(pán)的數(shù)據(jù),通常不會(huì)特別大(20MB左右)
  • 內(nèi)核就可以把分散的寫(xiě)集中起來(lái),統(tǒng)一優(yōu)化磁盤(pán)的寫(xiě)入,比如可以把多次小的寫(xiě)合并成單次大的寫(xiě)等等

Cached

  • 從磁盤(pán)讀取文件的頁(yè)緩存,也就是用來(lái)緩存從文件讀取的數(shù)據(jù)
  • 下次訪問(wèn)這些文件數(shù)據(jù)時(shí),就可以直接從內(nèi)存中快速獲取,而不需要再次訪問(wèn)緩慢的磁盤(pán)。

2.4.2.proc 文件系統(tǒng)

  • /proc 是 Linux 內(nèi)核提供的一種特殊文件系統(tǒng),是用戶(hù)跟內(nèi)核交互的接口。比方說(shuō),用戶(hù)可以從 /proc中查詢(xún)內(nèi)核的運(yùn)行狀態(tài)和配置選項(xiàng),查詢(xún)進(jìn)程的運(yùn)行狀態(tài)、統(tǒng)計(jì)數(shù)據(jù)等,也可以通過(guò)/proc來(lái)修改內(nèi)核的配置
  • proc 文件系統(tǒng)同時(shí)也是很多性能工具的最終數(shù)據(jù)來(lái)源

2.4.3.緩沖命中率

緩存命中率,是指直接通過(guò)緩存獲取數(shù)據(jù)的請(qǐng)求次數(shù),占所有數(shù)據(jù)請(qǐng)求次數(shù)的百分比。

命中率越高,表示使用緩存帶來(lái)的收益越高,應(yīng)用程序的性能也就越好。

下面是查看系統(tǒng)緩存命中情況的工具:

  • cachestat 提供了整個(gè)操作系統(tǒng)緩存的讀寫(xiě)命中情況。
  • cachetop 提供了每個(gè)進(jìn)程的緩存命中情況。
$ cachestat 1 3
TOTAL MISSES HITS DIRTIES BUFFERS_MB CACHED_MB
	2 		0 		2 		1 			17 					279
	2 		0 		2 		1 			17 					279
	2 		0 		2 		1 			17 					279
  • TOTAL:表示總的 I/O 次數(shù);
  • MISSES:表示緩存未命中的次數(shù);
  • HITS:表示緩存命中的次數(shù);
  • DIRTIES:表示新增到緩存中的臟頁(yè)數(shù);
  • BUFFERS_MB:表示 Buffers 的大小,以 MB 為單位;
  • CACHED_MB:表示 Cache 的大小,以 MB 為單位。
$ cachetop
11:58:50 Buffers MB: 258 / Cached MB: 347 / Sort: HITS / Order: ascending
PID UID CMD HITS MISSES DIRTIES READ_HIT% WRITE_HIT%
13029 root python 1 0 0 100.0% 0.0%

它的輸出跟 top 類(lèi)似,默認(rèn)按照緩存的命中次數(shù)(HITS)排序,展示了每個(gè)進(jìn)程的緩存命中情況。具體到每一個(gè)指標(biāo),這里的 HITSMISSESDIRTIES ,跟 cachestat 里的含義一樣,分別代表間隔時(shí)間內(nèi)的緩存命中次數(shù)、未命中次數(shù)以及新增到緩存中的臟頁(yè)數(shù)。

3.性能分析

首先,你最容易想到的是 系統(tǒng)內(nèi)存使用情況 ,比如已用內(nèi)存、剩余內(nèi)存、共享內(nèi)存、可用內(nèi)存、緩存和緩沖區(qū)的用量等。

  • 已用內(nèi)存和剩余內(nèi)存很容易理解,就是已經(jīng)使用和還未使用的內(nèi)存;
  • 共享內(nèi)存是通過(guò)tmpfs(內(nèi)存的文件系統(tǒng) )實(shí)現(xiàn)的所以它的大小也就是 tmpfs 使用的內(nèi)存大小。tmpfs 其實(shí)也是一種特殊的緩存;
  • 可用內(nèi)存是新進(jìn)程可以使用的最大內(nèi)存,它包括剩余內(nèi)存和可回收緩存;
  • 緩存包括兩部分,一部分是磁盤(pán)讀取文件的頁(yè)緩存,用來(lái)緩存從磁盤(pán)讀取的數(shù)據(jù),可以加快以后再次訪問(wèn)的速度。另一部分,則是 Slab 分配器中的可回收內(nèi)存;
  • 緩沖區(qū)是對(duì)原始磁盤(pán)塊的臨時(shí)存儲(chǔ),用來(lái)緩存將要寫(xiě)入磁盤(pán)的數(shù)據(jù)。這樣內(nèi)核就可以把分散的寫(xiě)集中起來(lái),統(tǒng)一優(yōu)化磁盤(pán)寫(xiě)入。

第二類(lèi)很容易想到的,應(yīng)該是 進(jìn)程內(nèi)存使用情況,比如進(jìn)程的虛擬內(nèi)存、常駐內(nèi)存、共享內(nèi)存以及Swap 內(nèi)存等。

  • 虛擬內(nèi)存,包括了進(jìn)程代碼段、數(shù)據(jù)段、共享內(nèi)存、已經(jīng)申請(qǐng)的堆內(nèi)存和已經(jīng)換出的內(nèi)存等。這里要注意,已經(jīng)申請(qǐng)的內(nèi)存,即使還沒(méi)有分配物理內(nèi)存,也算作虛擬內(nèi)存;
  • 常駐內(nèi)存是進(jìn)程實(shí)際使用的物理內(nèi)存,不過(guò),它不包括 Swap 和共享內(nèi)存;
  • 共享內(nèi)存,既包括與其他進(jìn)程共同使用的真實(shí)的共享內(nèi)存,還包括了加載的動(dòng)態(tài)鏈接庫(kù)以及程序的代碼段等;
  • Swap 內(nèi)存,是指通過(guò) Swap 換出到磁盤(pán)的內(nèi)存。

第三類(lèi) 缺頁(yè)異常 ,系統(tǒng)調(diào)用內(nèi)存分配請(qǐng)求后,并不會(huì)立刻為其分配物理內(nèi)存,而是在請(qǐng)求首次訪問(wèn)時(shí),通過(guò)缺頁(yè)異常來(lái)分配。缺頁(yè)異常又分為下面兩種場(chǎng)景。

  • 可以直接從物理內(nèi)存中分配時(shí),被稱(chēng)為次缺頁(yè)異常。
  • 需要磁盤(pán)I/O介入(比如 Swap)時(shí),被稱(chēng)為主缺頁(yè)異常。

第四類(lèi)重要指標(biāo)就是** Swap的使用情況** ,比如 Swap 的已用空間、剩余空間、換入速度和換出速度等。

  • 已用空間和剩余空間很好理解,就是字面上的意思,已經(jīng)使用和沒(méi)有使用的內(nèi)存空間。
  • 換入和換出速度,則表示每秒鐘換入和換出內(nèi)存的大小。

4.調(diào)優(yōu)工具

4.1.根據(jù)內(nèi)存指標(biāo)

linux 性能優(yōu)化-內(nèi)存優(yōu)化,運(yùn)維,linux,性能優(yōu)化,運(yùn)維

4.2.性能工具

linux 性能優(yōu)化-內(nèi)存優(yōu)化,運(yùn)維,linux,性能優(yōu)化,運(yùn)維

5.內(nèi)存調(diào)優(yōu)策略

常見(jiàn)的優(yōu)化思路有這么幾種。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-765238.html

  1. 最好禁止 Swap。如果必須開(kāi)啟 Swap,降低 swappiness 的值,減少內(nèi)存回收時(shí) Swap 的使用傾向。
  2. 減少內(nèi)存的動(dòng)態(tài)分配。比如可以使用內(nèi)存池、**大頁(yè)(HugePage)**等。
  3. 盡量使用緩存和緩沖區(qū)來(lái)訪問(wèn)數(shù)據(jù)。比如可以使用堆棧明確聲明內(nèi)存空間,來(lái)存儲(chǔ)需要緩存的數(shù)據(jù);或者用Redis 這類(lèi)的外部緩存組件,優(yōu)化數(shù)據(jù)的訪問(wèn)。
  4. 使用 cgroups 等方式限制進(jìn)程的內(nèi)存使用情況。這樣可以確保系統(tǒng)內(nèi)存不會(huì)被異常進(jìn)程耗盡。
  5. 通過(guò) /proc/pid/oom_adj ,調(diào)整核心應(yīng)用的 oom_score。這樣,可以保證即使內(nèi)存緊張,核心應(yīng)用也不會(huì)被 OOM殺死。

到了這里,關(guān)于linux 性能優(yōu)化-內(nèi)存優(yōu)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 前端性能優(yōu)化——內(nèi)存問(wèn)題

    前端性能優(yōu)化——內(nèi)存問(wèn)題

    過(guò)高的內(nèi)存資源占用會(huì)導(dǎo)致 Web 應(yīng)用變慢,甚至崩潰??梢酝ㄟ^(guò) window.performance.memory 查看瀏覽器的內(nèi)存限制等信息。 Web 前端開(kāi)發(fā)中存在許多內(nèi)存問(wèn)題,下面是一些常見(jiàn)的內(nèi)存問(wèn)題: 內(nèi)存泄漏:當(dāng)一個(gè)對(duì)象不再被使用,但仍然占用著內(nèi)存空間,就會(huì)導(dǎo)致內(nèi)存泄漏問(wèn)題。在 Web

    2024年02月16日
    瀏覽(33)
  • 【Android 性能優(yōu)化:內(nèi)存篇】——WebView 內(nèi)存泄露治理

    【Android 性能優(yōu)化:內(nèi)存篇】——WebView 內(nèi)存泄露治理

    背景:筆者在公司項(xiàng)目中優(yōu)化內(nèi)存泄露時(shí)發(fā)現(xiàn)WebView 相關(guān)的內(nèi)存泄露問(wèn)題非常經(jīng)典,一個(gè) Fragment 頁(yè)面使用的 WebView 有多條泄露路徑,故記錄下。 項(xiàng)目中一個(gè)Fragment 使用 Webview,在 Fragment onDestroyView 時(shí)候卻沒(méi)有釋放,釋放 WebView 還不簡(jiǎn)單嘛,于是筆者在 Fragment 的 onDestroyView 補(bǔ)充

    2024年02月04日
    瀏覽(33)
  • Unity 性能優(yōu)化二:內(nèi)存問(wèn)題

    Unity 性能優(yōu)化二:內(nèi)存問(wèn)題

    目錄 策略導(dǎo)致的內(nèi)存問(wèn)題 GFX內(nèi)存 紋理資源 壓縮格式 Mipmap 網(wǎng)格資源 Read/Write 頂點(diǎn)數(shù)據(jù) 骨骼 靜態(tài)合批 Shader資源 Reserved Memory RenderTexture 動(dòng)畫(huà)資源 音頻資源? 字體資源 粒子系統(tǒng)資源 Mono堆內(nèi)存 1. Assetbundle 打包的時(shí)候,單個(gè)資源被重復(fù)打包,可以把依賴(lài)的資源,單個(gè)打包,通過(guò)

    2024年02月15日
    瀏覽(21)
  • MySQL數(shù)據(jù)庫(kù)內(nèi)存配置與性能優(yōu)化:合理分配內(nèi)存,提升數(shù)據(jù)庫(kù)性能

    MySQL數(shù)據(jù)庫(kù)內(nèi)存配置與性能優(yōu)化:合理分配內(nèi)存,提升數(shù)據(jù)庫(kù)性能

    ???????? 引言 :MySQL是廣泛使用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),而合理配置數(shù)據(jù)庫(kù)的內(nèi)存是保障其高性能運(yùn)行的關(guān)鍵之一.本文將介紹如何根據(jù)MySQL數(shù)據(jù)庫(kù)內(nèi)存值大小來(lái)定義,以及這樣配置如何影響數(shù)據(jù)庫(kù)的性能 ? 內(nèi)存配置的基本原則 : innodb_buffer_pool_size :該參數(shù)定義了InnoDB存儲(chǔ)引擎

    2024年02月22日
    瀏覽(25)
  • linux運(yùn)維(二)內(nèi)存占用分析

    linux運(yùn)維(二)內(nèi)存占用分析

    1.1: free 命令是 free最常規(guī)的查看內(nèi)存占用情況的命令 1.2: 參數(shù)說(shuō)明 top命令經(jīng)常用來(lái)監(jiān)控linux的系統(tǒng)狀況,比如cpu、內(nèi)存的使用,程序員基本都知道這個(gè)命令。 按 q 退出 top命令也可以用來(lái)查內(nèi)存 輸入top命令 按x,高亮排序列,默認(rèn)應(yīng)該是%CPU,按CPU占用排序。 按shift +M (或 按

    2024年02月09日
    瀏覽(24)
  • 項(xiàng)目性能優(yōu)化-內(nèi)存泄漏檢測(cè)與修改

    項(xiàng)目性能優(yōu)化-內(nèi)存泄漏檢測(cè)與修改

    最近終于有空優(yōu)化一波項(xiàng)目的性能了,第一波借助Android Studio自帶的Profiler工具檢測(cè)內(nèi)存泄漏。 右側(cè)帶有綠色原點(diǎn)的就是此時(shí)運(yùn)行的Profiler的SESSION,點(diǎn)擊右側(cè)MEMORY進(jìn)入內(nèi)存監(jiān)控的詳情模塊 第三步中抓取一段時(shí)間后,會(huì)自動(dòng)停止,并打開(kāi)Heap Dump文件 可以看到抓取到2個(gè)會(huì)導(dǎo)致內(nèi)存

    2024年02月11日
    瀏覽(30)
  • MySQL 數(shù)據(jù)存儲(chǔ)和優(yōu)化------MySQL索引原理和優(yōu)化 ---- (架構(gòu)---索引---事務(wù)---鎖---集群---性能---分庫(kù)分表---實(shí)戰(zhàn)---運(yùn)維)持續(xù)更新

    MySQL 數(shù)據(jù)存儲(chǔ)和優(yōu)化------MySQL索引原理和優(yōu)化 ---- (架構(gòu)---索引---事務(wù)---鎖---集群---性能---分庫(kù)分表---實(shí)戰(zhàn)---運(yùn)維)持續(xù)更新

    Mysql架構(gòu)體系全系列文章主目錄(進(jìn)不去說(shuō)明還沒(méi)寫(xiě)完) https://blog.csdn.net/grd_java/article/details/123033016 本文只是整個(gè)系列筆記的第二章:MySQL索引原理和優(yōu)化,只解釋索引相關(guān)概念。 索引可以提高查詢(xún)效率,影響where查詢(xún)和order by排序,它可以從多方面進(jìn)行分類(lèi),但是實(shí)際創(chuàng)建時(shí)

    2024年02月02日
    瀏覽(23)
  • 性能優(yōu)化-內(nèi)存泄漏、內(nèi)存溢出、cpu占用高、死鎖、棧溢出詳解

    性能優(yōu)化-內(nèi)存泄漏、內(nèi)存溢出、cpu占用高、死鎖、棧溢出詳解

    含義:內(nèi)層泄露是程序中己動(dòng)態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無(wú)法釋放,造成系統(tǒng)內(nèi)存的浪費(fèi)。(換言之,GC回收不了這些不再被使用的對(duì)象,這些對(duì)象的生命周期太長(zhǎng)) 危害:當(dāng)應(yīng)用程序長(zhǎng)時(shí)間連續(xù)運(yùn)行時(shí),會(huì)導(dǎo)致嚴(yán)重的性能下降;OOM;偶爾會(huì)耗盡連接對(duì)象;可

    2024年01月19日
    瀏覽(26)
  • idea性能優(yōu)化--內(nèi)存設(shè)置及可視化

    idea性能優(yōu)化--內(nèi)存設(shè)置及可視化

    英文 中文 效果 英文 中文 具體根據(jù)自己電腦性能設(shè)置 英文 中文

    2024年02月06日
    瀏覽(21)
  • 簡(jiǎn)單理解Nginx內(nèi)存池:優(yōu)化性能的關(guān)鍵

    Nginx是一款高性能的Web服務(wù)器和反向代理服務(wù)器,它以其卓越的性能和穩(wěn)定性而聞名。在Nginx的核心性能優(yōu)化中,內(nèi)存管理扮演了至關(guān)重要的角色。 問(wèn)題背景 Nginx在處理高并發(fā)請(qǐng)求時(shí),需要頻繁地分配和釋放內(nèi)存,例如請(qǐng)求的緩沖區(qū)、臨時(shí)文件等。傳統(tǒng)的內(nèi)存分配方式可能導(dǎo)

    2024年02月09日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包