国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Linux 查看進程消耗內存情況總結

存儲 存儲軟件
在Linux中,有很多命令或工具查看內存使用情況,今天我們來看看如何查看進程消耗、占用的內存情況,Linux的內存管理和相關概念要比Windows復雜一些。

在Linux中,有很多命令或工具查看內存使用情況,今天我們來看看如何查看進程消耗、占用的內存情況,Linux的內存管理和相關概念要比Windows復雜一些。在此之前,我們需要了解一下Linux系統下面有關內存的專用名詞和專業術語概念:

物理內存和虛擬內存

物理內存:就是系統硬件提供的內存大小,是真正的內存,一般叫做內存條。也叫隨機存取存儲器(random access memory,RAM)又稱作“隨機存儲器”,是與CPU直接交換數據的內部存儲器,也叫主存(內存)。

虛擬內存:相對于物理內存,在Linux下還有一個虛擬內存的概念,虛擬內存就是為了滿足物理內存的不足而提出的策略,它是利用磁盤空間虛擬出的一塊邏輯內存,用作虛擬內存的磁盤空間被稱為交換空間(Swap Space)。Linux會在物理內存不足時,使用虛擬內存,內核會把暫時不用的內存塊信息寫到虛擬內存,這樣物理內存就得到了釋放,這塊兒內存就可以用于其他目的,而需要用到這些內容的時候,這些信息就會被重新從虛擬內存讀入物理內存。

Linux的buffers與cached

在Linux中經常發現空閑的內存很少,似乎所有的內存都被消耗殆盡了,表面上看是內存不夠用了,很多新手看到內存被“消耗殆盡”非常緊張,其實這個是因為Linux系統將空閑的內存用來做磁盤文件數據的緩存。這個導致你的系統看起來處于內存非常緊急的狀況。但是實際上不是這樣。這個區別于Windows的內存管理。Linux會利用空閑的內存來做cached & buffers。

buffers是指用來給塊設備做的緩沖大小(塊設備的讀寫緩沖區),它只記錄文件系統的metadata以及 tracking in-flight pages.

Buffers are associated with a specific block device, and cover caching of filesystem metadata as well as tracking in-flight pages. The cache only contains parked file data. That is, the buffers remember what’s in directories, what file permissions are, and keep track of what memory is being written from or read to for a particular block device. The cache only contains the contents of the files themselves.

cached是作為page cache的內存, 文件系統的cache。你讀寫文件的時候,Linux內核為了提高讀寫性能與速度,會將文件在內存中進行緩存,這部分內存就是Cache Memory(緩存內存)。即使你的程序運行結束后,Cache Memory也不會自動釋放。這就會導致你在Linux系統中程序頻繁讀寫文件后,你會發現可用物理內存會很少。其實這緩存內存(Cache Memory)在你需要使用內存的時候會自動釋放,所以你不必擔心沒有內存可用

Cached is the size of the page cache. Buffers is the size of in-memory block I/O buffers. Cached matters; Buffers is largely irrelevant.

Cached is the size of the Linux page cache, minus the memory in the swap cache, which is represented by SwapCached (thus the total page cache size is Cached + SwapCached). Linux performs all file I/O through the page cache. Writes are implemented as simply marking as dirty the corresponding pages in the page cache; the flusher threads then periodically write back to disk any dirty pages. Reads are implemented by returning the data from the page cache; if the data is not yet in the cache, it is first populated. On a modern Linux system, Cached can easily be several gigabytes. It will shrink only in response to memory pressure. The system will purge the page cache along with swapping data out to disk to make available more memory as needed.

Buffers are in-memory block I/O buffers. They are relatively short-lived. Prior to Linux kernel version 2.4, Linux had separate page and buffer caches. Since 2.4, the page and buffer cache are unified and Buffers is raw disk blocks not represented in the page cache—i.e., not file data. The Buffers metric is thus of minimal importance. On most systems, Buffers is often only tens of megabytes.

Linux共享內存

共享內存是進程間通信中最簡單的方式之一。共享內存允許兩個或更多進程訪問同一塊內存,就如同 malloc() 函數向不同進程返回了指向同一個物理內存區域的指針。當一個進程改變了這塊地址中的內容的時候,其它進程都會察覺到這個。其實所謂共享內存,就是多個進程間共同地使用同一段物理內存空間,它是通過將同一段物理內存映射到不同進程的虛擬空間來實現的。由于映射到不同進程的虛擬空間中,不同進程可以直接使用,不需要像消息隊列那樣進行復制,所以共享內存的效率很高。共享內存可以通過mmap()映射普通文件機制來實現,也可以System V共享內存機制來實現,System V是通過映射特殊文件系統shm中的文件實現進程間的共享內存通信,也就是說每個共享內存區域對應特殊文件系統shm中的一個文件。

另外,我們還必須了解RSS、PSS、USS等相關概念:

  • VSS – Virtual Set Size 虛擬耗用內存(包含共享庫占用的內存)
  • RSS – Resident Set Size 實際使用物理內存(包含共享庫占用的內存)
  • PSS – Proportional Set Size 實際使用的物理內存(比例分配共享庫占用的內存)
  • USS – Unique Set Size 進程獨自占用的物理內存(不包含共享庫占用的內存)

RSS(Resident set size),使用top命令可以查詢到,是最常用的內存指標,表示進程占用的物理內存大小。但是,將各進程的RSS值相加,通常會超出整個系統的內存消耗,這是因為RSS中包含了各進程間共享的內存。

PSS(Proportional set size)所有使用某共享庫的程序均分該共享庫占用的內存時,每個進程占用的內存。顯然所有進程的PSS之和就是系統的內存使用量。它會更準確一些,它將共享內存的大小進行平均后,再分攤到各進程上去。

USS(Unique set size )進程獨自占用的內存,它是PSS中自己的部分,它只計算了進程獨自占用的內存大小,不包含任何共享的部分。

所以下面介紹的命令,有些查看進程的虛擬內存使用,有些是查看進程的RSS或實際物理內存。在講述的時候,我們會標注這些信息。

top命令查看

執行top命令后,執行SHIFT +F ,可以選擇按某列排序,例如選擇n后,就會按字段%MEM排序

 

當然也可以使用shift+m 或大寫鍵M 讓top命令按字段%MEM來排序,當然你也可以按VIRT(虛擬內存)、SWAP(進程使用的SWAP空間)、RES(實際使用物理內存,當然這里由于涉及共享內存緣故,你看到的實際內存非常大)

%MEM — Memory usage (RES)

A task’s currently used share of available physical memory

VIRT — virtual memory

The total amount of virtual memory used by the task. It includes all code, data and shared libraries plus pages that have been swapped out. (Note: you can define the STATSIZE=1 environment variable and the VIRT will be calculated from the /proc/#/state VmSize field.)

VIRT = SWAP + RES

SWAP — Swapped size (kb)

The swapped out portion of a task’s total virtual memory image.

RES — Resident size (kb)

RES = CODE + DATA.

是否有人會覺得奇怪,為什么%MEM這一列的值加起來會大于100呢? 這個是因為這里計算的時候包含了共享內存的緣故,另外由于共享內存的緣故,你看到進程使用VIRT或RES都非常高。由于大部分的物理內存通常在多個應用程序之間共享,名為實際使用物理內存(RSS,對應top命令里面的RES)的這個標準的內存耗用衡量指標會大大高估內存耗用情況。

 

ps命令查看

使用ps命令找出占用內存資源最多的20個進程(數量可以任意設置)

  1. # ps aux | head -1;ps aux |grep -v PID |sort -rn -k +4 | head -20 
  2. USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 
  3. oracle   32147 11.0 51.2 13252080 12666320 ?   Rs   Aug24 163:16 ora_s000_SCM2 
  4. oracle   32149 14.2 50.9 13250344 12594264 ?   Ss   Aug24 210:41 ora_s001_SCM2 
  5. oracle   32153  4.2 49.6 13250820 12279432 ?   Ss   Aug24  62:27 ora_s003_SCM2 
  6. oracle   32155  2.5 48.6 13250268 12040732 ?   Ss   Aug24  38:21 ora_s004_SCM2 
  7. oracle   32157  1.2 44.5 13250296 11011708 ?   Ss   Aug24  18:31 ora_s005_SCM2 
  8. oracle   32151  2.7 39.7 13350436 9829944 ?    Ss   Aug24  41:18 ora_s002_SCM2 
  9. oracle   32159  0.5 38.9 13250704 9625764 ?    Ss   Aug24   8:18 ora_s006_SCM2 
  10. oracle   32161  0.2 26.3 13250668 6507244 ?    Ss   Aug24   3:38 ora_s007_SCM2 
  11. oracle   32129  0.0 25.5 13299084 6324644 ?    Ss   Aug24   1:25 ora_dbw0_SCM2 
  12. oracle   32181  0.0 15.8 13250152 3913260 ?    Ss   Aug24   0:56 ora_s017_SCM2 
  13. oracle   32145  2.7 15.3 13255256 3786456 ?    Ss   Aug24  40:11 ora_d000_SCM2 
  14. oracle   32127  0.0 15.2 13248996 3762860 ?    Ss   Aug24   0:05 ora_mman_SCM2 
  15. oracle   32163  0.0 14.2 13250108 3525160 ?    Ss   Aug24   1:04 ora_s008_SCM2 
  16. oracle   32165  0.0  8.1 13250172 2007704 ?    Ss   Aug24   0:37 ora_s009_SCM2 
  17. oracle   32169  0.0  6.6 13250060 1656864 ?    Ss   Aug24   0:08 ora_s011_SCM2 
  18. oracle   32177  0.0  6.0 13250148 1498760 ?    Ss   Aug24   0:12 ora_s015_SCM2 
  19. oracle   32187  0.0  5.1 13250084 1267384 ?    Ss   Aug24   0:06 ora_s020_SCM2 
  20. oracle   32179  0.0  5.1 13250584 1280156 ?    Ss   Aug24   0:05 ora_s016_SCM2 
  21. oracle   32167  0.0  5.0 13250060 1248668 ?    Ss   Aug24   0:08 ora_s010_SCM2 
  22. oracle   32175  0.0  3.4 13250596 857380 ?     Ss   Aug24   0:03 ora_s014_SCM2 
  23.  
  24. #ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -n -r | less 

查看進程占用的實際物理內存(與smem看到實際物理內存大小有出入,這里解釋一下:SIZE: 進程使用的地址空間, 如果進程映射了100M的內存, 進程的地址空間將報告為100M內存. 事實上, 這個大小不是一個程序實際使用的內存數. 所以這里看到的內存跟smem看到的大小有出入)

  1. ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' |cut -d "" -f2 | cut -d "-" -f1 

  1. ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -n 

smem命令查看

關于smem命令,這里不做介紹,直接參考鏈接Linux監控工具介紹系列——smem

  1. #smem -rs pss 

 

pmap命令查看

  1. # ps -ef | grep tomcat 
  2. # pmap 32341 

  1. # pmap -x 32341 

The -x option can be used to provide information about the memory allocation and mapping types per mapping. The amount of resident, non-shared anonymous, and locked memory is shown for each mapping。

 

python腳本查看

網上有個python腳本計算程序或進程的內存使用情況,地址位于https://raw.githubusercontent.com/pixelb/ps_mem/master/ps_mem.py

python ps_mem.py

  1. [root@mylnx03 ~]# python ps_mem.py -h 
  2. Usage: ps_mem [OPTION]... 
  3. Show program core memory usage 
  4.    
  5.   -h, -help                   Show this help 
  6.   -p <pid>[,pid2,...pidN]     Only show memory usage PIDs in the specified list 
  7.   -s, --split-args            Show and separate by, all command line arguments 
  8.   -t, --total                 Show only the total value 
  9.   -d, --discriminate-by-pid   Show by process rather than by program 
  10.   -S, --swap                  Show swap information 
  11.   -w <N>                      Measure and show process memory every N seconds 
  12. [root@mylnx03 ~]# python ps_mem.py  -p 32341 
  13.  Private  +   Shared  =  RAM used       Program 
  14.    
  15. 411.2 MiB + 184.0 KiB = 411.4 MiB       java 
  16. --------------------------------- 
  17.                         411.4 MiB 
  18. ================================= 

參考資料:

  • https://stackoverflow.com/questions/131303/how-to-measure-actual-memory-usage-of-an-application-or-process
  • http://www.cnblogs.com/kerrycode/p/5079319.html
  • https://raw.githubusercontent.com/pixelb/ps_mem/master/ps_mem.py
責任編輯:武曉燕 來源: 博客園
相關推薦

2021-11-29 20:44:31

Linux內存進程

2022-09-26 09:44:10

Linux

2023-03-05 16:40:07

linux進程內存

2019-11-06 15:58:54

Linux內存消耗進程

2019-12-16 10:43:38

Linux內存消耗進程

2017-01-18 21:57:14

2020-02-04 13:50:09

Linux進程內存使用

2020-08-03 14:17:34

CPU內存系統運維

2010-02-03 17:16:58

Linux內存使用

2013-12-10 10:41:28

Linux終端smem內存

2013-11-06 15:01:51

Linux命令內存

2022-05-27 11:59:22

Linux內存CPU

2018-05-31 11:58:06

Linux進程Early OOM

2010-06-10 17:12:23

Linux 內存監控

2024-08-20 17:37:37

2018-04-11 08:25:11

Linux內存方法

2020-04-29 15:10:16

Linux命令進程

2010-06-02 11:06:15

Linux 內存監控

2022-07-10 20:47:39

linux中虛擬內存

2020-08-27 14:40:55

Linux內存內核
點贊
收藏

51CTO技術棧公眾號

国产情侣一区| 色8久久人人97超碰香蕉987| 亚洲自拍小视频免费观看| av激情成人网| 欧美性受极品xxxx喷水| a视频免费看| 国产精品免费人成网站| 日韩欧美一区二| 国产综合久久久久影院| 免费av在线一区二区| 欧美成人国产| 成人在线观看视频网站| 第一sis亚洲原创| 国产成+人+综合+亚洲欧洲| 国产色噜噜噜91在线精品| 久热在线中文字幕色999舞| 黄瓜视频成人app免费| 亚洲毛片在线免费观看| 国产精选在线| 亚洲福利在线视频| 色呦呦呦在线观看| 欧美精品一区二区三区视频| 欧美v亚洲v| 日韩久久精品电影| 超碰aⅴ人人做人人爽欧美| 亚洲精品一区二区网址| 日本免费久久| 理论片在线不卡免费观看| 1313精品午夜理伦电影| 欧美中文在线视频| 日韩精品欧美| 国产精品一区视频| 日韩国产一区二| 精品嫩模一区二区三区| 成人午夜免费电影| 成人免费毛片播放| 亚洲在线免费播放| 日av在线播放| 精品国产乱码久久久久久浪潮| 五月天国产在线| 日韩亚洲一区二区| 一呦二呦三呦国产精品| 亚洲一区二区中文| 青青草伊人久久| 国产自产在线视频| 日韩美女精品在线| 国内在线精品| 精品国产91乱码一区二区三区 | 日韩久久久久久| 爱啪视频在线观看视频免费| 亚洲天堂网站在线观看视频| 麻豆久久一区| 国产欧美日韩高清| 中文日韩欧美| 中国丰满熟妇xxxx性| 国产欧美一区二区精品性色超碰| 免费特级黄毛片| 欧美一区二区成人6969| 日韩黄色三级| 国产主播在线一区| 久久99精品一区二区三区三区| 少妇黄色一级片| 欧美日韩不卡一区| 国产一区 二区| 成人精品久久av网站| 视频一区二区三区入口| 国产a视频免费观看| 日韩欧美国产免费播放| 蜜桃视频在线观看免费视频| 国产91精品久久久久| 久久一区二区三区四区五区 | 精品国产欧美一区二区三区成人| 欧美丝袜激情| 天天综合五月天| 亚洲国产人成综合网站| 超清av在线| 国产精品久久一区| 国产精品99久久久久久宅男| 亚洲欧美一区二区三区在线播放| 亚洲天堂网站在线观看视频| 99久久综合| 成人性免费视频| 欧洲中文字幕精品| 草莓视频一区二区三区| 日韩国产欧美精品| 亚洲一区二区影院| 国产精成人品2018| 国产一区精品视频| 国产精品入口麻豆九色| www欧美xxxx| 成人精品aaaa网站| 国产日韩av一区| 操喷在线视频| 91久久精品国产91久久性色tv| 26uuu精品一区二区三区四区在线| 午夜视频在线观看网站| 欧美激情日韩图片| 精品一区二区三区视频在线观看 | 国产精品v欧美精品v日韩| 97久久久精品综合88久久| 国内精品久久久久国产| 啪一啪鲁一鲁2019在线视频| 国产成人自拍网| 黄色片网站在线观看| 国产精品丝袜久久久久久不卡| bt7086福利一区国产| gogo高清在线播放免费| 444亚洲人体| 伊人性伊人情综合网| 精品精品视频| 国产欧美久久久久| 亚洲黄色在线看| 中国女人久久久| 成人全视频高清免费观看| 国产精品电影网站| 国产精品美女久久久久久| 成人国产综合| 在线看无码的免费网站| 日韩一区二区三区免费看| 午夜影院欧美| 蜜臀一区二区三区| 欧美在线观看视频| 中文字幕一区二区三中文字幕| 国产精品免费精品自在线观看| 日韩成人午夜影院| 亚洲国产三级网| 免费成人性网站| 性欧美高清come| 日韩成人在线资源| 精品国产乱码久久久久久1区2区| 亚洲乱亚洲高清| 国内精品久久久久国产| 久久精品女人的天堂av| 在线不卡的av| 久久九九国产| av成人影院在线| 在线看无码的免费网站| 亚洲女人被黑人巨大进入al| 韩国v欧美v日本v亚洲v| 不卡专区在线| 亚洲三区在线观看| 亚洲精品永久免费| 波多野结衣一区二区三区| 91国内外精品自在线播放| 浮妇高潮喷白浆视频| 欧美高清在线视频观看不卡| 国产女主播在线一区二区| 果冻天美麻豆一区二区国产| 黄页在线播放| 国产欧美精品va在线观看| 色综合久久久久| 西西人体一区二区| 成人性生交大片免费网站| 国产人妻777人伦精品hd| 久久久精品一区| 国产精品色噜噜| 久久免费av| 最新av在线播放| 国产黄色激情视频| 高清一区二区三区日本久| 亚洲精品视频一区二区| 91精品啪在线观看国产81旧版| www在线观看播放免费视频日本| 亚洲欧洲久久| 欧美另类69精品久久久久9999| 亚洲品质自拍视频| 亚洲青涩在线| 3d欧美精品动漫xxxx无尽| 亚欧美在线观看| 99精品99久久久久久宅男| 亚洲黄色有码视频| 国产精品美女久久久久av爽李琼 | 美女久久一区| 91大神在线观看线路一区| 亚洲高清免费在线观看| 亚洲自拍小视频| 国产偷亚洲偷欧美偷精品| 国产女同互慰高潮91漫画| 最新国产精品| 免费观看成人性生生活片 | 国产福利成人在线| 5月丁香婷婷综合| 97超碰欧美中文字幕| 国产精品久久久久一区二区三区厕所 | 亚洲精品a级片| 欧美激情网站| 久久综合色播| 日韩精品大片| 4438全国成人免费| 欧美一级免费观看| 国产精品美女久久久久久久网站| 野花国产精品入口| 高清一区二区三区av| av在线1区2区| 九色91popny| 日日噜噜噜噜夜夜爽亚洲精品| 97久久久免费福利网址| 精品国产乱码久久久久久1区2区| 一区二区三区在线看| 国产电影一区在线|