女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

非常實(shí)用的Linux內(nèi)存查看方法

strongerHuang ? 來(lái)源:strongerHuang ? 2023-05-29 09:05 ? 次閱讀

0. 引言

系統(tǒng)內(nèi)存是硬件系統(tǒng)中必不可少的部分,定時(shí)查看系統(tǒng)內(nèi)存資源運(yùn)行情況,可以幫助我們及時(shí)發(fā)現(xiàn)內(nèi)存資源是否存在異常占用,確保業(yè)務(wù)的穩(wěn)定運(yùn)行。

例如:定期查看公司的網(wǎng)站服務(wù)器內(nèi)存使用情況,可以確保服務(wù)器的資源是否夠用,或者發(fā)現(xiàn)服務(wù)器內(nèi)存被占用異常可以及時(shí)解決,避免因內(nèi)存不夠?qū)е聼o(wú)法訪問(wèn)網(wǎng)站或訪問(wèn)速度慢的問(wèn)題。

因此,對(duì)于 Linux 管理員來(lái)說(shuō),在日常工作中能夠熟練在 Linux 系統(tǒng)下檢查內(nèi)存的運(yùn)行狀況就變得尤為重要!

查看內(nèi)存的運(yùn)行狀態(tài)并非難事,但是針對(duì)不同的情況使用正確的方式查看呢?

一口君整理了幾個(gè) 個(gè)非常實(shí)用的 Linux 內(nèi)存查看方法

1、free命令

2、 vmstat命令

3、 /proc/meminfo 命令

4、 top命令

5、 htop 命令

6、查看進(jìn)程內(nèi)存信息

Linux內(nèi)存總覽圖

ffa4dbea-fdb6-11ed-90ce-dac502259ad0.png該圖很好的描述了OS內(nèi)存的使用和分配等詳細(xì)信息。建議大家配合該圖來(lái)一起學(xué)習(xí)和理解內(nèi)存的一些概念。

一、free命令

free 命令可以顯示當(dāng)前系統(tǒng)未使用的和已使用的內(nèi)存數(shù)目,還可以顯示被內(nèi)核使用的內(nèi)存緩沖區(qū)。

1. free 命令語(yǔ)法:

free[options]

free 命令選項(xiàng):

-b#以Byte為單位顯示內(nèi)存使用情況;
-k#以KB為單位顯示內(nèi)存使用情況;
-m#以MB為單位顯示內(nèi)存使用情況;
-g#以GB為單位顯示內(nèi)存使用情況。
-o#不顯示緩沖區(qū)調(diào)節(jié)列;
-s<間隔秒數(shù)>#持續(xù)觀察內(nèi)存使用狀況;
-t#顯示內(nèi)存總和列;
-V#顯示版本信息。

2. free 命令實(shí)例

free-t#以總和的形式顯示內(nèi)存的使用信息
free-h-s10#周期性的查詢(xún)內(nèi)存使用信息,每10s執(zhí)行一次命令

free-h-c10#輸出10次
在版本 v3.2.8,就是輸出一次!需要配合-s 使用。
在版本 v3.3.10,不加-s,就默認(rèn)1秒輸出一次。
free-V#查看版本號(hào)

v3.2.8

0034870e-fdb7-11ed-90ce-dac502259ad0.png

v3.3.10

0034870e-fdb7-11ed-90ce-dac502259ad0.png

下面先解釋一下輸出的內(nèi)容:

內(nèi)容 含義
Mem 行(第二行)是內(nèi)存的使用情況
Swap 行(第三行)是交換空間的使用情況
total 總可用物理內(nèi)存。一般是總物理內(nèi)存除去一些預(yù)留的和操作系統(tǒng)本身的內(nèi)存占用,是操作系統(tǒng)可以支配的內(nèi)存大小。這個(gè)在v3.2.8和v3.3.10一樣。這個(gè)值是/proc/meminfo中MemTotal的值。
used 列顯示已經(jīng)被使用的物理內(nèi)存和交換空間。在v3.2.8,這個(gè)值是(total - free)得出來(lái)的??梢哉f(shuō)是系統(tǒng)已經(jīng)被系統(tǒng)分配,但是實(shí)際并不一定正在被真正的使用,其空間可以被回收再分配的。在v3.3.10,這個(gè)值是(total - free - cache - buffers)得出來(lái)的,是真正目前正在被使用的內(nèi)存。
free 系統(tǒng)還未使用的物理內(nèi)存。這個(gè)值是/proc/meminfo中MemFree的值
shared 共享內(nèi)存的空間。這個(gè)值是/proc/meminfo中Shmem的值
buff/cache 列顯示被 buffer 和 cache 使用的物理內(nèi)存大小
available v3.3.10中的項(xiàng)??雌饋?lái)這個(gè)值是可以使用的內(nèi)存,不過(guò)(available + used) < total,也就是available < (free + cache + buffers)。而在v3.2.8中(free + cache + buffers)是一般認(rèn)為的可用內(nèi)存,既然在新版本中有這個(gè)available數(shù)據(jù),應(yīng)該是更準(zhǔn)確的吧。畢竟并不是所有的未使用的內(nèi)存就一定是可用的。這個(gè)值是取的/proc/meminfo中MemAvailable的值,如果meminfo中沒(méi)有這個(gè)值,會(huì)依據(jù)meminfo中的Active(file),Inactive(file),MemFree,SReclaimable等值計(jì)算一個(gè)。
-/+ buffers/cache v3.2.8有這一行,v3.3.10 沒(méi)有。其中,used 這一項(xiàng)是(used - buffers - cached)的值,即(total - free - buffers - cached)的值,是真正在使用的內(nèi)存的值。free 這一項(xiàng)是(free + buffers + cached)的值,是真正未使用的內(nèi)存的值。個(gè)人覺(jué)得有 -/+ buffers/cache,這一欄看的挺習(xí)慣。。不過(guò)新版本v3.3.10的used更明確。相信有不少人和我一樣,剛看到v3.2.8里面的used占了這么多內(nèi)存的時(shí)候,有點(diǎn)摸不著頭腦。

二、vmstat 指令

vmstat命令是最常見(jiàn)的Linux/Unix監(jiān)控工具,用于查看系統(tǒng)的內(nèi)存存儲(chǔ)信息,是一個(gè)報(bào)告虛擬內(nèi)存統(tǒng)計(jì)信息的小工具,屬于sysstat包。

vmstat 命令報(bào)告包括:進(jìn)程、內(nèi)存、分頁(yè)、阻塞 IO、中斷、磁盤(pán)、CPU。

可以展現(xiàn)給定時(shí)間間隔的服務(wù)器的狀態(tài)值,包括服務(wù)器的CPU使用率,內(nèi)存使用,虛擬內(nèi)存交換情況,IO讀寫(xiě)情況。

這個(gè)命令是我查看Linux/Unix最喜愛(ài)的命令,一個(gè)是Linux/Unix都支持,二是相比top,我可以看到整個(gè)機(jī)器的CPU,內(nèi)存,IO的使用情況,而不是單單看到各個(gè)進(jìn)程的CPU使用率和內(nèi)存使用率(使用場(chǎng)景不一樣)。

1. 命令格式:

vmstat-s(參數(shù))

2. 舉例

一般vmstat工具的使用是通過(guò)兩個(gè)數(shù)字參數(shù)來(lái)完成的,第一個(gè)參數(shù)是采樣的時(shí)間間隔數(shù),單位是秒,第二個(gè)參數(shù)是采樣的次數(shù),如:

root@local:~#vmstat21
procs-----------memory-------------swap-------io-----system------cpu----
rbswpdfreebuffcachesisobiboincsussyidwa
10034984723158363819540000120001000

2表示每個(gè)兩秒采集一次服務(wù)器狀態(tài),1表示只采集一次。

實(shí)際上,在應(yīng)用過(guò)程中,我們會(huì)在一段時(shí)間內(nèi)一直監(jiān)控,不想監(jiān)控直接結(jié)束vmstat就行了,例如:009b2450-fdb7-11ed-90ce-dac502259ad0.png這表示vmstat每2秒采集數(shù)據(jù),按下ctrl + c結(jié)束程序,這里采集了3次數(shù)據(jù)我就結(jié)束了程序。

類(lèi)別 項(xiàng)目 含義 說(shuō)明
Procs(進(jìn)程) r 等待執(zhí)行的任務(wù)數(shù) 展示了正在執(zhí)行和等待cpu資源的任務(wù)個(gè)數(shù)。當(dāng)這個(gè)值超過(guò)了cpu個(gè)數(shù),就會(huì)出現(xiàn)cpu瓶頸。
B 等待IO的進(jìn)程數(shù)量
Memory(內(nèi)存) swpd 正在使用虛擬的內(nèi)存大小,單位k
free 空閑內(nèi)存大小
buff 已用的buff大小,對(duì)塊設(shè)備的讀寫(xiě)進(jìn)行緩沖
cache 已用的cache大小,文件系統(tǒng)的cache
inact 非活躍內(nèi)存大小,即被標(biāo)明可回收的內(nèi)存,區(qū)別于free和active 具體含義見(jiàn):概念補(bǔ)充(當(dāng)使用-a選項(xiàng)時(shí)顯示)
active 活躍的內(nèi)存大小 具體含義見(jiàn):概念補(bǔ)充(當(dāng)使用-a選項(xiàng)時(shí)顯示)
Swap si 每秒從交換區(qū)寫(xiě)入內(nèi)存的大?。▎挝唬簁b/s)
so 每秒從內(nèi)存寫(xiě)到交換區(qū)的大小
IO bi 每秒讀取的塊數(shù)(讀磁盤(pán)) 塊設(shè)備每秒接收的塊數(shù)量,單位是block,這里的塊設(shè)備是指系統(tǒng)上所有的磁盤(pán)和其他塊設(shè)備,現(xiàn)在的Linux版本塊的大小為1024bytes
bo 每秒寫(xiě)入的塊數(shù)(寫(xiě)磁盤(pán)) 塊設(shè)備每秒發(fā)送的塊數(shù)量,單位是block
system in 每秒中斷數(shù),包括時(shí)鐘中斷 這兩個(gè)值越大,會(huì)看到由內(nèi)核消耗的cpu時(shí)間sy會(huì)越多
秒上下文切換次數(shù),例如我們調(diào)用系統(tǒng)函數(shù),就要進(jìn)行上下文切換,線程的切換,也要進(jìn)程上下文切換,這個(gè)值要越小越好,太大了,要考慮調(diào)低線程或者進(jìn)程的數(shù)目
cs 每秒上下文切換數(shù)
CPU(以百分比表示) us 用戶(hù)進(jìn)程執(zhí)行消耗cpu時(shí)間(user time) us的值比較高時(shí),說(shuō)明用戶(hù)進(jìn)程消耗的cpu時(shí)間多,但是如果長(zhǎng)期超過(guò)50%的使用,那么我們就該考慮優(yōu)化程序算法或其他措施了
sy 系統(tǒng)進(jìn)程消耗cpu時(shí)間(system time) sys的值過(guò)高時(shí),說(shuō)明系統(tǒng)內(nèi)核消耗的cpu資源多,這個(gè)不是良性的表現(xiàn),我們應(yīng)該檢查原因。這里us + sy的參考值為80%,如果us+sy 大于 80%說(shuō)明可能存在CPU不足
Id 空閑時(shí)間(包括IO等待時(shí)間) 一般來(lái)說(shuō) us+sy+id=100
wa 等待IO時(shí)間 wa過(guò)高時(shí),說(shuō)明io等待比較嚴(yán)重,這可能是由于磁盤(pán)大量隨機(jī)訪問(wèn)造成的,也有可能是磁盤(pán)的帶寬出現(xiàn)瓶頸。

3. 常見(jiàn)問(wèn)題處理

常見(jiàn)問(wèn)題及解決方法

如果r經(jīng)常大于4,且id經(jīng)常少于40,表示cpu的負(fù)荷很重。

如果pi,po長(zhǎng)期不等于0,表示內(nèi)存不足。

如果disk經(jīng)常不等于0,且在b中的隊(duì)列大于3,表示io性能不好。

1.如果在processes中運(yùn)行的序列(process r)是連續(xù)的大于在系統(tǒng)中的CPU的個(gè)數(shù)表示系統(tǒng)現(xiàn)在運(yùn)行比較慢,有多數(shù)的進(jìn)程等待CPU。

2.如果r的輸出數(shù)大于系統(tǒng)中可用CPU個(gè)數(shù)的4倍的話,則系統(tǒng)面臨著CPU短缺的問(wèn)題,或者是CPU的速率過(guò)低,系統(tǒng)中有多數(shù)的進(jìn)程在等待CPU,造成系統(tǒng)中進(jìn)程運(yùn)行過(guò)慢。

3.如果空閑時(shí)間(cpu id)持續(xù)為0并且系統(tǒng)時(shí)間(cpu sy)是用戶(hù)時(shí)間的兩倍(cpu us)系統(tǒng)則面臨著CPU資源的短缺。

當(dāng)發(fā)生以上問(wèn)題的時(shí)候請(qǐng)先調(diào)整應(yīng)用程序?qū)PU的占用情況.使得應(yīng)用程序能夠更有效的使用CPU.同時(shí)可以考慮增加更多的CPU. 關(guān)于CPU的使用情況還可以結(jié)合mpstat, ps aux top prstat –a等等一些相應(yīng)的命令來(lái)綜合考慮關(guān)于具體的CPU的使用情況,和那些進(jìn)程在占用大量的CPU時(shí)間.一般情況下,應(yīng)用程序的問(wèn)題會(huì)比較大一些.比如一些sql語(yǔ)句不合理等等都會(huì)造成這樣的現(xiàn)象.

4. 內(nèi)存問(wèn)題現(xiàn)象:

內(nèi)存的瓶頸是由scan rate (sr)來(lái)決定的.scan rate是通過(guò)每秒的始終算法來(lái)進(jìn)行頁(yè)掃描的.如果scan rate(sr)連續(xù)的大于每秒200頁(yè)則表示可能存在內(nèi)存缺陷.同樣的如果page項(xiàng)中的pi和po這兩欄表示每秒頁(yè)面的調(diào)入的頁(yè)數(shù)和每秒調(diào)出的頁(yè)數(shù).如果該值經(jīng)常為非零值,也有可能存在內(nèi)存的瓶頸,當(dāng)然,如果個(gè)別的時(shí)候不為0的話,屬于正常的頁(yè)面調(diào)度這個(gè)是虛擬內(nèi)存的主要原理.

解決辦法:

1.調(diào)節(jié)applications & servers使得對(duì)內(nèi)存和cache的使用更加有效.

2.增加系統(tǒng)的內(nèi)存.

3.Implement priority paging in s in pre solaris 8 versions by adding line "set priority paging=1" in /etc/system. Remove this line if upgrading from Solaris 7 to 8 & retaining old /etc/system file.

關(guān)于內(nèi)存的使用情況還可以結(jié)ps aux top prstat –a等等一些相應(yīng)的命令來(lái)綜合考慮關(guān)于具體的內(nèi)存的使用情況,和那些進(jìn)程在占用大量的內(nèi)存.

一般情況下,如果內(nèi)存的占用率比較高,但是,CPU的占用很低的時(shí)候,可以考慮是有很多的應(yīng)用程序占用了內(nèi)存沒(méi)有釋放,但是,并沒(méi)有占用CPU時(shí)間,可以考慮應(yīng)用程序,對(duì)于未占用CPU時(shí)間和一些后臺(tái)的程序,釋放內(nèi)存的占用。

r 表示運(yùn)行隊(duì)列(就是說(shuō)多少個(gè)進(jìn)程真的分配到CPU),我測(cè)試的服務(wù)器目前CPU比較空閑,沒(méi)什么程序在跑,當(dāng)這個(gè)值超過(guò)了CPU數(shù)目,就會(huì)出現(xiàn)CPU瓶頸了。

這個(gè)也和top的負(fù)載有關(guān)系,一般負(fù)載超過(guò)了3就比較高,超過(guò)了5就高,超過(guò)了10就不正常了,服務(wù)器的狀態(tài)很危險(xiǎn)。

top的負(fù)載類(lèi)似每秒的運(yùn)行隊(duì)列。如果運(yùn)行隊(duì)列過(guò)大,表示你的CPU很繁忙,一般會(huì)造成CPU使用率很高。

5. 常見(jiàn)性能問(wèn)題分析

IO/CPU/men連鎖反應(yīng)

1.free急劇下降
2.buff和cache被回收下降,但也無(wú)濟(jì)于事
3.依舊需要使用大量swap交換分區(qū)swpd
4.等待進(jìn)程數(shù),b增多
5.讀寫(xiě)IO,bibo增多
6.siso大于0開(kāi)始從硬盤(pán)中讀取
7.cpu等待時(shí)間用于IO等待,wa增加

內(nèi)存不足

1.開(kāi)始使用swpd,swpd不為0
2.siso大于0開(kāi)始從硬盤(pán)中讀取

io瓶頸

1.讀寫(xiě)IO,bibo增多超過(guò)2000
2.cpu等待時(shí)間用于IO等待,wa增加超過(guò)20
3.sy系統(tǒng)調(diào)用時(shí)間長(zhǎng),IO操作頻繁會(huì)導(dǎo)致增加>30%
4.waio等待時(shí)間長(zhǎng)
iowait%<20%????????????良好
????iowait%?<35%????????????一般
????iowait%?>50%
5.進(jìn)一步使用iostat觀察

CPU瓶頸:load,vmstat中r列

1.反應(yīng)為CPU隊(duì)列長(zhǎng)度
 2.一段時(shí)間內(nèi),CPU正在處理和等待CPU處理的進(jìn)程數(shù)之和,直接反應(yīng)了CPU的使用和申請(qǐng)情況。
 3.理想的load average:核數(shù)*CPU數(shù)*0.7
 CPU個(gè)數(shù):grep 'physicalid'/proc/cpuinfo|sort-u
核數(shù):grep 'coreid'/proc/cpuinfo|sort-u|wc-l
4.超過(guò)這個(gè)值就說(shuō)明已經(jīng)是CPU瓶頸了

三、/proc/meminfo

用途:用于從/proc文件系統(tǒng)中提取與內(nèi)存相關(guān)的信息。這些文件包含有 系統(tǒng)和內(nèi)核的內(nèi)部信息。其實(shí) free 命令中的信息都來(lái)自于 /proc/meminfo 文件。/proc/meminfo 文件包含了更多更原始的信息,只是看起來(lái)不太直觀。

1. 查看方法:

cat/proc/meminfo

2. 實(shí)例及信息解釋

peng@ubuntu:~$cat/proc/meminfo
MemTotal:2017504kB//所有可用的內(nèi)存大小,
物理內(nèi)存減去預(yù)留位和內(nèi)核使用。系統(tǒng)從加電開(kāi)始到引導(dǎo)完成,firmware/BIOS要預(yù)留一
些內(nèi)存,內(nèi)核本身要占用一些內(nèi)存,最后剩下可供內(nèi)核支配的內(nèi)存就是MemTotal。這個(gè)值
在系統(tǒng)運(yùn)行期間一般是固定不變的,重啟會(huì)改變。
MemFree: 511052 kB //表示系統(tǒng)尚未使用的內(nèi)存。
MemAvailable:640336kB//真正的系統(tǒng)可用內(nèi)存,
系統(tǒng)中有些內(nèi)存雖然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可
以回收,所以這部分可回收的內(nèi)存加上MemFree才是系統(tǒng)可用的內(nèi)存
Buffers:114348kB//用來(lái)給塊設(shè)備做緩存的內(nèi)存,(文件系統(tǒng)的metadata、pages)
Cached:162264kB//分配給文件緩沖區(qū)的內(nèi)存,例如vi一個(gè)文件,就會(huì)將未保存的內(nèi)容寫(xiě)到該緩沖區(qū)
SwapCached:3032kB//被高速緩沖存儲(chǔ)用的交換空間(硬盤(pán)的swap)的大小
Active:555484kB//經(jīng)常使用的高速緩沖存儲(chǔ)器頁(yè)面文件大小
Inactive:295984kB//不經(jīng)常使用的高速緩沖存儲(chǔ)器文件大小
Active(anon):381020kB//活躍的匿名內(nèi)存
Inactive(anon):244068kB//不活躍的匿名內(nèi)存
Active(file):174464kB//活躍的文件使用內(nèi)存
Inactive(file):51916kB//不活躍的文件使用內(nèi)存
Unevictable:48kB//不能被釋放的內(nèi)存頁(yè)
Mlocked:48kB//系統(tǒng)調(diào)用mlock
SwapTotal:998396kB//交換空間總內(nèi)存
SwapFree:843916kB//交換空間空閑內(nèi)存
Dirty:128kB//等待被寫(xiě)回到磁盤(pán)的
Writeback:0kB//正在被寫(xiě)回的
AnonPages:572776kB//未映射頁(yè)的內(nèi)存/映射到用戶(hù)空間的非文件頁(yè)表大小
Mapped:119816kB//映射文件內(nèi)存
Shmem:50212kB//已經(jīng)被分配的共享內(nèi)存
Slab:113700kB//內(nèi)核數(shù)據(jù)結(jié)構(gòu)緩存
SReclaimable:68652kB//可收回slab內(nèi)存
SUnreclaim:45048kB//不可收回slab內(nèi)存
KernelStack:8812kB//內(nèi)核消耗的內(nèi)存
PageTables:27428kB//管理內(nèi)存分頁(yè)的索引表的大小
NFS_Unstable:0kB//不穩(wěn)定頁(yè)表的大小
Bounce:0kB//在低端內(nèi)存中分配一個(gè)臨時(shí)buffer作為跳轉(zhuǎn),把位
于高端內(nèi)存的緩存數(shù)據(jù)復(fù)制到此處消耗的內(nèi)存
WritebackTmp:0kB//FUSE用于臨時(shí)寫(xiě)回緩沖區(qū)的內(nèi)存
CommitLimit:2007148kB//系統(tǒng)實(shí)際可分配內(nèi)存
Committed_AS:3567280kB//系統(tǒng)當(dāng)前已分配的內(nèi)存
VmallocTotal:34359738367kB//預(yù)留的虛擬內(nèi)存總量
VmallocUsed:0kB//已經(jīng)被使用的虛擬內(nèi)存
VmallocChunk:0kB//可分配的最大的邏輯連續(xù)的虛擬內(nèi)存
HardwareCorrupted:0kB//表示“中毒頁(yè)面”中的內(nèi)存量
即hasfailed的內(nèi)存(通常由ECC標(biāo)記).ECC代表“糾錯(cuò)碼”.ECCmemory能夠糾正小錯(cuò)誤并檢測(cè)較大錯(cuò)誤;
在具有非ECC內(nèi)存的典型PC上,內(nèi)存錯(cuò)誤未被檢測(cè)到.如果使用ECC檢測(cè)到無(wú)法糾正的錯(cuò)誤(在內(nèi)存或緩存中,
具體取決于系統(tǒng)的硬件支持),則Linux內(nèi)核會(huì)將相應(yīng)的頁(yè)面標(biāo)記為中毒.
AnonHugePages:0kB//匿名大頁(yè)
【/proc/meminfo的AnonHugePages==所有進(jìn)程的/proc//smaps中AnonHugePages之和】
ShmemHugePages:0kB//用于共享內(nèi)存的大頁(yè)
ShmemPmdMapped:0kB
CmaTotal:0kB//連續(xù)內(nèi)存區(qū)管理總量
CmaFree:0kB//連續(xù)內(nèi)存區(qū)管理空閑量
HugePages_Total:0//預(yù)留HugePages的總個(gè)數(shù)
HugePages_Free:0//池中尚未分配的HugePages數(shù)量,
真正空閑的頁(yè)數(shù)等于HugePages_Free-HugePages_Rsvd
HugePages_Rsvd:0//表示池中已經(jīng)被應(yīng)用程序分配但尚未使用的HugePages數(shù)量
HugePages_Surp:0//這個(gè)值得意思是當(dāng)開(kāi)始配置了20個(gè)大頁(yè),現(xiàn)在修改配置為16,那么這個(gè)參數(shù)就會(huì)顯示為4,一般不修改配置,這個(gè)值都是0
Hugepagesize:2048kB//大內(nèi)存頁(yè)的size
//指直接映射(directmapping)的內(nèi)存大小,從代碼上來(lái)看,值記錄管理頁(yè)表占用的內(nèi)存,就是描述線性映射空間中,有多個(gè)空間分別使用了2M/4K/1G頁(yè)映射
DirectMap4k:96128kB
DirectMap2M:2000896kB
DirectMap1G:0kB

注意這個(gè)文件顯示的單位是kB而不是KB,1kB=1000B,但是實(shí)際上應(yīng)該是KB,1KB=1024B

還可以使用命令 less /proc/meminfo 直接讀取該文件。通過(guò)使用 less 命令,可以在長(zhǎng)長(zhǎng)的輸出中向上和向下滾動(dòng),找到你需要的內(nèi)容。

從中我們可以很清晰明了的看出內(nèi)存中的各種指標(biāo)情況,例如 MemFree的空閑內(nèi)存和SwapFree中的交換內(nèi)存。

3. 代碼實(shí)例

負(fù)責(zé)輸出/proc/meminfo的源代碼是:

fs/proc/meminfo.c:meminfo_proc_show()
staticintmeminfo_proc_show(structseq_file*m,void*v)
{
structsysinfoi;
unsignedlongcommitted;
longcached;
longavailable;
unsignedlongpages[NR_LRU_LISTS];
intlru;

si_meminfo(&i);
si_swapinfo(&i);
committed=percpu_counter_read_positive(&vm_committed_as);

cached=global_node_page_state(NR_FILE_PAGES)-
total_swapcache_pages()-i.bufferram;
if(cached>10);
show_val_kb(m,"VmallocUsed:",0ul);
show_val_kb(m,"VmallocChunk:",0ul);

#ifdefCONFIG_MEMORY_FAILURE
seq_printf(m,"HardwareCorrupted:%5lukB
",
atomic_long_read(&num_poisoned_pages)<

四、top 指令

用途:用于打印系統(tǒng)中的CPU和內(nèi)存使用情況。輸出結(jié)果中,可以很清晰的看出已用和可用內(nèi)存的資源情況。top 最好的地方之一就是發(fā)現(xiàn)可能已經(jīng)失控的服務(wù)的進(jìn)程 ID 號(hào)(PID)。有了這些 PID,你可以對(duì)有問(wèn)題的任務(wù)進(jìn)行故障排除(或 kill)。

語(yǔ)法

top[-][ddelay][q][c][S][s][i][n][b]

參數(shù)說(shuō)明:

d:改變顯示的更新速度,或是在交談式指令列(interactivecommand)按s
q:沒(méi)有任何延遲的顯示速度,如果使用者是有superuser的權(quán)限,則top將會(huì)以最高的優(yōu)先序執(zhí)行
c:切換顯示模式,共有兩種模式,一是只顯示執(zhí)行檔的名稱(chēng),另一種是顯示完整的路徑與名稱(chēng)
S:累積模式,會(huì)將己完成或消失的子進(jìn)程(deadchildprocess)的CPUtime累積起來(lái)
s:安全模式,將交談式指令取消,避免潛在的危機(jī)
i:不顯示任何閑置(idle)或無(wú)用(zombie)的進(jìn)程
n:更新的次數(shù),完成后將會(huì)退出top
b:批次檔模式,搭配"n"參數(shù)一起使用,可以用來(lái)將top的結(jié)果輸出到檔案內(nèi)

舉例

00c7d8d8-fdb7-11ed-90ce-dac502259ad0.png第一行,任務(wù)隊(duì)列信息,同 uptime 命令的執(zhí)行結(jié)果

系統(tǒng)時(shí)間:0210運(yùn)行時(shí)間:up 2:26 min,當(dāng)前登錄用戶(hù):1 user負(fù)載均衡(uptime) load average: 0.00, 0.06, 0.07average后面的三個(gè)數(shù)分別是1分鐘、5分鐘、15分鐘的負(fù)載情況。load average數(shù)據(jù)是每隔5秒鐘檢查一次活躍的進(jìn)程數(shù),然后按特定算法計(jì)算出的數(shù)值。如果這個(gè)數(shù)除以邏輯CPU的數(shù)量,結(jié)果高于5的時(shí)候就表明系統(tǒng)在超負(fù)荷運(yùn)轉(zhuǎn)了

第二行,Tasks — 任務(wù)(進(jìn)程)

總進(jìn)程:229 total, 運(yùn)行:1 running, 休眠:163 sleeping, 停止: 0 stopped, 僵尸進(jìn)程: 0 zombie

第三行,cpu狀態(tài)信息

0.7%us【user space】— 用戶(hù)空間占用CPU的百分比。1.0%sy【sysctl】— 內(nèi)核空間占用CPU的百分比。0.0%ni【】— 改變過(guò)優(yōu)先級(jí)的進(jìn)程占用CPU的百分比97.9%id【idolt】— 空閑CPU百分比0.3%wa【wait】— IO等待占用CPU的百分比0.0%hi【Hardware IRQ】— 硬中斷占用CPU的百分比0.0%si【Software Interrupts】— 軟中斷占用CPU的百分比

第四行,內(nèi)存狀態(tài)

2017504 total, 653616 free, 1154200 used, 209688 buff/cache【緩存的內(nèi)存量】

第五行,swap交換分區(qū)信息

998396 total, 771068 free, 227328 used. 635608 avail Mem

第七行以下:各進(jìn)程(任務(wù))的狀態(tài)監(jiān)控

PID — 進(jìn)程idUSER — 進(jìn)程所有者PR — 進(jìn)程優(yōu)先級(jí)NI — nice值。負(fù)值表示高優(yōu)先級(jí),正值表示低優(yōu)先級(jí)VIRT — 進(jìn)程使用的虛擬內(nèi)存總量,單位kb。VIRT=SWAP+RESRES — 進(jìn)程使用的、未被換出的物理內(nèi)存大小,單位kb。RES=CODE+DATASHR — 共享內(nèi)存大小,單位kbS —進(jìn)程狀態(tài)。D=不可中斷的睡眠狀態(tài) R=運(yùn)行 S=睡眠 T=跟蹤/停止 Z=僵尸進(jìn)程%CPU — 上次更新到現(xiàn)在的CPU時(shí)間占用百分比%MEM — 進(jìn)程使用的物理內(nèi)存百分比TIME+ — 進(jìn)程使用的CPU時(shí)間總計(jì),單位1/100秒COMMAND — 進(jìn)程名稱(chēng)(命令名/命令行)

常用實(shí)例

顯示進(jìn)程信息

#top

顯示完整命令

#top-c

以批處理模式顯示程序信息

#top-b

以累積模式顯示程序信息

#top-S

設(shè)置信息更新次數(shù)

top-n2

//表示更新兩次后終止更新顯示

設(shè)置信息更新時(shí)間

#top-d3

//表示更新周期為3秒

顯示指定的進(jìn)程信息

#top-p139

//顯示進(jìn)程號(hào)為139的進(jìn)程信息,CPU、內(nèi)存占用率等

顯示更新十次后退出

top-n10

五、htop 指令

htop 它類(lèi)似于 top 命令,但可以讓你在垂直和水平方向上滾動(dòng),所以你可以看到系統(tǒng)上運(yùn)行的所有進(jìn)程,以及他們完整的命令行。

可以不用輸入進(jìn)程的 PID 就可以對(duì)此進(jìn)程進(jìn)行相關(guān)的操作 (killing, renicing)。

htop快照:01413fb6-fdb7-11ed-90ce-dac502259ad0.png可以使用快捷鍵

F1,h,?:查看htop使用說(shuō)明,
F2,s:設(shè)置選項(xiàng)
F3,/:搜索進(jìn)程
F4,:過(guò)濾器,輸入關(guān)鍵字搜索
F5,t:顯示屬性結(jié)構(gòu)
F6,<,>:選擇排序方式
F7,[,:減少進(jìn)程的優(yōu)先級(jí)(nice)
F8,]:增加進(jìn)程的優(yōu)先級(jí)(nice)
F9,k:殺掉選中的進(jìn)程
F10,q:退出htop
u:顯示所有用戶(hù),并可以選中某一特定用戶(hù)的進(jìn)程
U:取消標(biāo)記所有的進(jìn)程

第1行-第4行:顯示CPU當(dāng)前的運(yùn)行負(fù)載,有幾核就有幾行,我的是1核

Mem:顯示內(nèi)存的使用情況,3887M大概是3.8G,此時(shí)的Mem不包含buffers和cached的內(nèi)存,所以和free -m會(huì)不同Swp:顯示交換空間的使用情況,交換空間是當(dāng)內(nèi)存不夠和其中有一些長(zhǎng)期不用的數(shù)據(jù)時(shí),ubuntu會(huì)把這些暫時(shí)放到交換空間中

其他信息可以參考top命令說(shuō)明。

PS:如果你終端沒(méi)安裝 htop,先通過(guò)指令來(lái)安裝。sudo apt-get updatesudo apt install htop

六、查看制定進(jìn)程的內(nèi)存

通過(guò)/proc/procid/status查看進(jìn)程內(nèi)存

peng@ubuntu:~$cat/proc/4398/status
Name:kworker/0:0//進(jìn)程名
Umask:0000
State:I(idle)//進(jìn)程的狀態(tài)
//R(running)","S(sleeping)","D(disksleep)","T(stopped)","T(tracingstop)","Z(zombie)",or"X(dead)"
Tgid:4398//線程組的ID,一個(gè)線程一定屬于一個(gè)線程組(進(jìn)程組).
Ngid:0
Pid:4398//進(jìn)程的ID,更準(zhǔn)確的說(shuō)應(yīng)該是線程的ID.
PPid:2//當(dāng)前進(jìn)程的父進(jìn)程
TracerPid:0//跟蹤當(dāng)前進(jìn)程的進(jìn)程ID,如果是0,表示沒(méi)有跟蹤
Uid:0000
Gid:0000
FDSize:64//當(dāng)前分配的文件描述符,該值不是上限,如果打開(kāi)文件超過(guò)64個(gè)文件描述符,將以64進(jìn)行遞增
Groups://啟動(dòng)這個(gè)進(jìn)程的用戶(hù)所在的組
NStgid:4398
NSpid:4398
NSpgid:0
NSsid:0
Threads:1
SigQ:0/7640
SigPnd:0000000000000000
ShdPnd:0000000000000000
SigBlk:0000000000000000
SigIgn:ffffffffffffffff
SigCgt:0000000000000000
CapInh:0000000000000000
CapPrm:0000003fffffffff
CapEff:0000003fffffffff
CapBnd:0000003fffffffff
CapAmb:0000000000000000
NoNewPrivs:0
Seccomp:0
Speculation_Store_Bypass:vulnerable
Cpus_allowed:00000000,00000000,00000000,00000001
Cpus_allowed_list:0
Mems_allowed:00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:0
voluntary_ctxt_switches:5
nonvoluntary_ctxt_switches:0

總結(jié):

確定內(nèi)存使用情況是Linux運(yùn)維工程師必要的技能,尤其是某個(gè)應(yīng)用程序變得異常和占用系統(tǒng)內(nèi)存時(shí)。當(dāng)發(fā)生這種情況時(shí),知道有多種工具可以幫助你進(jìn)行故障排除十分方便的。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11442

    瀏覽量

    212604
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9643

    瀏覽量

    87150
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3103

    瀏覽量

    74940

原文標(biāo)題:Linux內(nèi)存占用分析的幾個(gè)方法

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux內(nèi)存管理是什么,Linux內(nèi)存管理詳解

    Linux內(nèi)存管理 Linux內(nèi)存管理是一個(gè)非常復(fù)雜的過(guò)程,主要分成兩個(gè)大的部分:內(nèi)核的內(nèi)存
    的頭像 發(fā)表于 05-11 17:54 ?6403次閱讀
    <b class='flag-5'>Linux</b>的<b class='flag-5'>內(nèi)存</b>管理是什么,<b class='flag-5'>Linux</b>的<b class='flag-5'>內(nèi)存</b>管理詳解

    查看Linux系統(tǒng)內(nèi)存使用情況的幾種方法

    Linux系統(tǒng)中,內(nèi)存監(jiān)控是優(yōu)化系統(tǒng)性能的關(guān)鍵。本文為你介紹12種方法,幫助你全面掌握Linux系統(tǒng)的內(nèi)存使用情況。這些
    的頭像 發(fā)表于 11-13 09:30 ?1.4w次閱讀
    <b class='flag-5'>查看</b><b class='flag-5'>Linux</b>系統(tǒng)<b class='flag-5'>內(nèi)存</b>使用情況的幾種<b class='flag-5'>方法</b>

    Linux 查看內(nèi)存插槽數(shù)、最大容量和頻率

    我們通過(guò)free命令查看機(jī)器空閑內(nèi)存時(shí),會(huì)發(fā)現(xiàn)free的值很小。這主要是因?yàn)?,?b class='flag-5'>linux中有這么一種思想,內(nèi)存不用白不用,因此它盡可能的cache 和buffer一些數(shù)據(jù),下面是
    發(fā)表于 07-09 06:09

    Linux查看內(nèi)存命令及解釋

    我們通過(guò)Linux查看內(nèi)存free命令查看機(jī)器空閑內(nèi)存時(shí),會(huì)發(fā)現(xiàn)free的值很小。下面我們就來(lái)了解學(xué)習(xí)下
    發(fā)表于 07-24 06:18

    Linux的CPU和內(nèi)存占用率查看

    我們經(jīng)常需要查看CPU和內(nèi)存占用率,否則一旦存在情況很快就會(huì)有IDC(或客戶(hù))找上門(mén),Linux查看資源使用情況有多種命令可以參考,CPU、內(nèi)存
    發(fā)表于 07-24 06:52

    Linux基礎(chǔ)教程之Linux查看磁盤(pán)掛載有哪些方法詳細(xì)方法概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是Linux基礎(chǔ)教程之Linux查看磁盤(pán)掛載有哪些方法詳細(xì)方法概述詳細(xì)資料免費(fèi)下載。
    發(fā)表于 10-26 17:15 ?1次下載

    你知道linux常用查看硬件設(shè)備信息命令的方法是什么?

    你知道linux常用查看硬件設(shè)備信息命令的方法是什么?
    發(fā)表于 05-13 11:04 ?3281次閱讀

    如何查看Linux中的ip地址

    在排除網(wǎng)絡(luò)問(wèn)題,設(shè)置新連接或配置防火墻時(shí),了解設(shè)備的 IP 地址非常重要。下面我們就來(lái)看看Linux查看ip地址的方法吧!
    發(fā)表于 05-25 09:35 ?3082次閱讀
    如何<b class='flag-5'>查看</b><b class='flag-5'>Linux</b>中的ip地址

    虛擬機(jī):查看進(jìn)程內(nèi)存和CPU占用的方法

    虛擬機(jī):查看進(jìn)程內(nèi)存和CPU占用的方法
    的頭像 發(fā)表于 06-22 11:06 ?8750次閱讀

    虛擬機(jī):Linux查看路由信息的幾種方法

    虛擬機(jī):Linux查看路由信息的幾種方法
    的頭像 發(fā)表于 06-22 15:24 ?8575次閱讀
    虛擬機(jī):<b class='flag-5'>Linux</b><b class='flag-5'>查看</b>路由信息的幾種<b class='flag-5'>方法</b>

    虛擬機(jī):Linux查看tar包文件內(nèi)容的方法

    虛擬機(jī):Linux查看tar包文件內(nèi)容的方法
    的頭像 發(fā)表于 06-22 16:49 ?7047次閱讀

    Linux終端中查看圖像的方法

    Linux 有很多用于查看圖像的 GUI 應(yīng)用。但我從來(lái)沒(méi)有嘗試過(guò)用任何命令行應(yīng)用來(lái)查看它。
    的頭像 發(fā)表于 12-24 15:14 ?4594次閱讀

    如何在Linux查看隱藏文件

    在windows可以查看隱藏的文件。在Linux中也可以查看隱藏文件且非常容易。要查看隱藏文件運(yùn)行`ls -a`命令即可。
    的頭像 發(fā)表于 01-04 17:31 ?1.6w次閱讀

    linux系統(tǒng)查看物理地址

    Linux系統(tǒng)中,訪問(wèn)和查看物理地址是一個(gè)非常重要的任務(wù),因?yàn)樗峁┝藢?duì)硬件設(shè)備的直接訪問(wèn)。本文將詳細(xì)介紹如何在Linux系統(tǒng)中查看物理地
    的頭像 發(fā)表于 11-16 16:47 ?4093次閱讀

    Linux服務(wù)器性能查看方法

    Linux服務(wù)器性能查看是系統(tǒng)管理員和開(kāi)發(fā)人員在日常工作中經(jīng)常需要進(jìn)行的任務(wù),以確保系統(tǒng)穩(wěn)定運(yùn)行并優(yōu)化資源使用。以下將詳細(xì)介紹多種Linux服務(wù)器性能查看
    的頭像 發(fā)表于 09-02 11:15 ?1596次閱讀