linux記憶體佔用問題調查——cached
一、問題描述:
線上centos伺服器檢視內容使用情況:
[[email protected] ~]# free -g
total used free shared buffers cached
Mem: 31 28 2 0 0 27
-/+ buffers/cache: 1 30
Swap: 3 0 3
系統總記憶體32g,看Mem下的free大小為2。系統上沒有跑任務服務,用ps大概統計下所有程式佔用的總記憶體:
# ps aux | awk '{mem += $6} END {print mem/1024/1024}' 0.127075
發現佔用記憶體也非常少。那麼,記憶體到底被哪些隱藏的設定佔用著?
二、問題分析:
根據free -g 命令可以看出來,Mem/cached佔用了27g,而Mem/used中包含了系統使用的+buffer+cache+slab。所以,到這裡就明朗化了,被佔用的記憶體都被cached佔有了。
1)可以這麼理解:在linux的記憶體分配機制中,優先使用實體記憶體,當實體記憶體還有空閒時(還夠用),不會釋放其佔用記憶體,就算佔用記憶體的程式已經被關閉了,該程式所佔用的記憶體用來做快取使用,對於開啟過的程式、或是讀取剛存取過得資料會比較快。
2)因此檢視目前程序正在實際被使用的記憶體,是used-(buffers+cache),也可以認為如果swap沒有大量使用,mem還是夠用的,只有mem被當前程序實際佔用完(沒有了buffers和cache),才會使用到swap的
三、Linux記憶體中的Cache真的能被回收麼?
1、什麼是buffer/cache?
buffer和cache是兩個在計算機技術中被用濫的名詞,放在不通語境下會有不同的意義。在Linux的記憶體管理中,這裡的buffer指Linux記憶體的:Buffer cache。這裡的cache指Linux記憶體中的:Page cache。翻譯成中文可以叫做緩衝區快取和頁面快取。在歷史上,它們一個(buffer)被用來當成對io裝置寫的快取,而另一個(cache)被用來當作對io裝置的讀快取,這裡的io裝置,主要指的是塊裝置檔案和檔案系統上的普通檔案。但是現在,它們的意義已經不一樣了。在當前的核心中,page
cache顧名思義就是針對記憶體頁的快取,說白了就是,如果有記憶體是以page進行分配管理的,都可以使用page cache作為其快取來管理使用。當然,不是所有的記憶體都是以頁(page)進行管理的,也有很多是針對塊(block)進行管理的,這部分記憶體使用如果要用到cache功能,則都集中到buffer cache中來使用。(從這個角度出發,是不是buffer cache改名叫做block cache更好?)然而,也不是所有塊(block)都有固定長度,系統上塊的長度主要是根據所使用的塊裝置決定的,而頁長度在X86上無論是32位還是64位都是4k。
明白了這兩套快取系統的區別,就可以理解它們究竟都可以用來做什麼了。
1)什麼是page cache
Page cache主要用來作為檔案系統上的檔案資料的快取來用,尤其是針對當程序對檔案有read/write操作的時候。如果你仔細想想的話,作為可以對映檔案到記憶體的系統呼叫:mmap是不是很自然的也應該用到page cache?在當前的系統實現裡,page cache也被作為其它檔案型別的快取裝置來用,所以事實上page cache也負責了大部分的塊裝置檔案的快取工作。
2)什麼是buffer cache
Buffer cache則主要是設計用來在系統對塊裝置進行讀寫的時候,對塊進行資料快取的系統來使用。這意味著某些對塊的操作會使用buffer cache進行快取,比如我們在格式化檔案系統的時候。一般情況下兩個快取系統是一起配合使用的,比如當我們對一個檔案進行寫操作的時候,page cache的內容會被改變,而buffer cache則可以用來將page標記為不同的緩衝區,並記錄是哪一個緩衝區被修改了。這樣,核心在後續執行髒資料的回寫(writeback)時,就不用將整個page寫回,而只需要寫回修改的部分即可。
2、如何回收cache?
Linux核心會在記憶體將要耗盡的時候,觸發記憶體回收的工作,以便釋放出記憶體給急需記憶體的程序使用。一般情況下,這個操作中主要的記憶體釋放都來自於對buffer/cache的釋放。尤其是被使用更多的cache空間。既然它主要用來做快取,只是在記憶體夠用的時候加快程序對檔案的讀寫速度,那麼在記憶體壓力較大的情況下,當然有必要清空釋放cache,作為free空間分給相關程序使用。所以一般情況下,我們認為buffer/cache空間可以被釋放,這個理解是正確的。
但是這種清快取的工作也並不是沒有成本。理解cache是幹什麼的就可以明白清快取必須保證cache中的資料跟對應檔案中的資料一致,才能對cache進行釋放。所以伴隨著cache清除的行為的,一般都是系統IO飆高。因為核心要對比cache中的資料和對應硬碟檔案上的資料是否一致,如果不一致需要寫回,之後才能回收。
在系統中除了記憶體將被耗盡的時候可以清快取以外,我們還可以使用下面這個檔案來人工觸發快取清除的操作,方法是:
echo 1 > /proc/sys/vm/drop_caches
當然,這個檔案可以設定的值分別為1、2、3。它們所表示的含義為:echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。
echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的物件(包括目錄項快取和inode快取)。slab分配器是核心中管理記憶體的一種機制,其中很多快取資料實現都是用的pagecache。
echo 3 > /proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的快取物件。
3、cache都能被回收麼?
我們分析了cache能被回收的情況,那麼有沒有不能被回收的cache呢?當然有。我們先來看第一種情況:
1)tmpfs
大家知道Linux提供一種“臨時”檔案系統叫做tmpfs,它可以將記憶體的一部分空間拿來當做檔案系統使用,使記憶體空間可以當做目錄檔案來用。現在絕大多數Linux系統都有一個叫做/dev/shm的tmpfs目錄,就是這樣一種存在。當然,我們也可以手工建立一個自己的tmpfs,方法如下:
[[email protected] ~]# mkdir /tmp/tmpfs
[[email protected] ~]# mount -t tmpfs -o size=20G none /tmp/tmpfs/
[[email protected] ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 10325000 3529604 6270916 37% /
/dev/sda3 20646064 9595940 10001360 49% /usr/local
/dev/mapper/vg-data 103212320 26244284 71725156 27% /data
tmpfs 66128476 14709004 51419472 23% /dev/shm
none 20971520 0 20971520 0% /tmp/tmpfs
於是我們就建立了一個新的tmpfs,空間是20G,我們可以在/tmp/tmpfs中建立一個20G以內的檔案。如果我們建立的檔案實際佔用的空間是記憶體的話,那麼這些資料應該佔用記憶體空間的什麼部分呢?根據pagecache的實現功能可以理解,既然是某種檔案系統,那麼自然該使用pagecache的空間來管理。我們試試是不是這樣?[[email protected] ~]# free -g
total used free shared buffers cached
Mem: 126 36 89 0 1 19
-/+ buffers/cache: 15 111
Swap: 2 0 2
[[email protected] ~]# dd if=/dev/zero of=/tmp/tmpfs/testfile bs=1G count=13
13+0 records in
13+0 records out
13958643712 bytes (14 GB) copied, 9.49858 s, 1.5 GB/s
[[email protected] ~]#
[[email protected] ~]# free -g
total used free shared buffers cached
Mem: 126 49 76 0 1 32
-/+ buffers/cache: 15 110
Swap: 2 0 2
我們在tmpfs目錄下建立了一個13G的檔案,並通過前後free命令的對比發現,cached增長了13G,說明這個檔案確實放在了記憶體裡並且核心使用的是cache作為儲存。再看看我們關心的指標: -/+ buffers/cache那一行。我們發現,在這種情況下free命令仍然提示我們有110G記憶體可用,但是真的有這麼多麼?我們可以人工觸發記憶體回收看看現在到底能回收多少記憶體:
[[email protected] ~]# echo 3 > /proc/sys/vm/drop_caches
[[email protected] ~]# free -g
total used free shared buffers cached
Mem: 126 43 82 0 0 29
-/+ buffers/cache: 14 111
Swap: 2 0 2
可以看到,cached佔用的空間並沒有像我們想象的那樣完全被釋放,其中13G的空間仍然被/tmp/tmpfs中的檔案佔用的。當然,我的系統中還有其他不可釋放的cache佔用著其餘16G記憶體空間。那麼tmpfs佔用的cache空間什麼時候會被釋放呢?是在其檔案被刪除的時候.如果不刪除檔案,無論記憶體耗盡到什麼程度,核心都不會自動幫你把tmpfs中的檔案刪除來釋放cache空間。
[[email protected] ~]# rm /tmp/tmpfs/testfile
[[email protected] ~]# free -g
total used free shared buffers cached
Mem: 126 30 95 0 0 16
-/+ buffers/cache: 14 111
Swap: 2 0 2
這是我們分析的第一種cache不能被回收的情況
2)共享記憶體
共享記憶體是系統提供給我們的一種常用的程序間通訊(IPC)方式,但是這種通訊方式不能在shell中申請和使用,所以我們需要一個簡單的測試程式,程式碼如下:
[[email protected] ~]# cat shm.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
#define MEMSIZE 2048*1024*1023
int
main()
{
int shmid;
char *ptr;
pid_t pid;
struct shmid_ds buf;
int ret;
shmid = shmget(IPC_PRIVATE, MEMSIZE, 0600);
if (shmid<0) {
perror("shmget()");
exit(1);
}
ret = shmctl(shmid, IPC_STAT, &buf);
if (ret < 0) {
perror("shmctl()");
exit(1);
}
printf("shmid: %d\n", shmid);
printf("shmsize: %d\n", buf.shm_segsz);
buf.shm_segsz *= 2;
ret = shmctl(shmid, IPC_SET, &buf);
if (ret < 0) {
perror("shmctl()");
exit(1);
}
ret = shmctl(shmid, IPC_SET, &buf);
if (ret < 0) {
perror("shmctl()");
exit(1);
}
printf("shmid: %d\n", shmid);
printf("shmsize: %d\n", buf.shm_segsz);
pid = fork();
if (pid<0) {
perror("fork()");
exit(1);
}
if (pid==0) {
ptr = shmat(shmid, NULL, 0);
if (ptr==(void*)-1) {
perror("shmat()");
exit(1);
}
bzero(ptr, MEMSIZE);
strcpy(ptr, "Hello!");
exit(0);
} else {
wait(NULL);
ptr = shmat(shmid, NULL, 0);
if (ptr==(void*)-1) {
perror("shmat()");
exit(1);
}
puts(ptr);
exit(0);
}
}
程式功能很簡單,就是申請一段不到2G共享記憶體,然後開啟一個子程序對這段共享記憶體做一個初始化操作,父程序等子程序初始化完之後輸出一下共享記憶體的內容,然後退出。但是退出之前並沒有刪除這段共享記憶體。我們來看看這個程式執行前後的記憶體使用:
[[email protected] ~]# free -g
total used free shared buffers cached
Mem: 126 30 95 0 0 16
-/+ buffers/cache: 14 111
Swap: 2 0 2
[[email protected] ~]# ./shm
shmid: 294918
shmsize: 2145386496
shmid: 294918
shmsize: -4194304
Hello!
[[email protected] ~]# free -g
total used free shared buffers cached
Mem: 126 32 93 0 0 18
-/+ buffers/cache: 14 111
Swap: 2 0 2
cached空間由16G漲到了18G。那麼這段cache能被回收麼?繼續測試:
[[email protected] ~]# echo 3 > /proc/sys/vm/drop_caches
[[email protected] ~]# free -g
total used free shared buffers cached
Mem: 126 32 93 0 0 18
-/+ buffers/cache: 14 111
Swap: 2 0 2
結果是仍然不可回收。大家可以觀察到,這段共享記憶體即使沒人使用,仍然會長期存放在cache中,直到其被刪除。刪除方法有兩種,一種是程式中使用shmctl()去IPC_RMID,另一種是使用ipcrm命令。我們來刪除試試:[[email protected] ~]# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00005feb 0 root 666 12000 4
0x00005fe7 32769 root 666 524288 2
0x00005fe8 65538 root 666 2097152 2
0x00038c0e 131075 root 777 2072 1
0x00038c14 163844 root 777 5603392 0
0x00038c09 196613 root 777 221248 0
0x00000000 294918 root 600 2145386496 0
[[email protected] ~]# ipcrm -m 294918
[[email protected] ~]# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00005feb 0 root 666 12000 4
0x00005fe7 32769 root 666 524288 2
0x00005fe8 65538 root 666 2097152 2
0x00038c0e 131075 root 777 2072 1
0x00038c14 163844 root 777 5603392 0
0x00038c09 196613 root 777 221248 0
[[email protected] ~]# free -g
total used free shared buffers cached
Mem: 126 30 95 0 0 16
-/+ buffers/cache: 14 111
Swap: 2 0 2
刪除共享記憶體後,cache被正常釋放了。這個行為與tmpfs的邏輯類似。核心底層在實現共享記憶體(shm)、訊息佇列(msg)和訊號量陣列(sem)這些POSIX:XSI的IPC機制的記憶體儲存時,使用的都是tmpfs。這也是為什麼共享記憶體的操作邏輯與tmpfs類似的原因。當然,一般情況下是shm佔用的記憶體更多,所以我們在此重點強調共享記憶體的使用。說到共享記憶體,Linux還給我們提供了另外一種共享記憶體的方法,就是:
3)mmap
mmap()是一個非常重要的系統呼叫,這僅從mmap本身的功能描述上是看不出來的。從字面上看,mmap就是將一個檔案對映進程序的虛擬記憶體地址,之後就可以通過操作記憶體的方式對檔案的內容進行操作。但是實際上這個呼叫的用途是很廣泛的。當malloc申請記憶體時,小段記憶體核心使用sbrk處理,而大段記憶體就會使用mmap。當系統呼叫exec族函式執行時,因為其本質上是將一個可執行檔案載入到記憶體執行,所以核心很自然的就可以使用mmap方式進行處理。我們在此僅僅考慮一種情況,就是使用mmap進行共享記憶體的申請時,會不會跟shmget()一樣也使用cache?
同樣,我們也需要一個簡單的測試程式:
[[email protected] ~]# cat mmap.c
#include <stdlib.h>
#include <stdio.h>
#include <strings.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#define MEMSIZE 1024*1024*1023*2
#define MPFILE "./mmapfile"
int main()
{
void *ptr;
int fd;
fd = open(MPFILE, O_RDWR);
if (fd < 0) {
perror("open()");
exit(1);
}
ptr = mmap(NULL, MEMSIZE, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANON, fd, 0);
if (ptr == NULL) {
perror("malloc()");
exit(1);
}
printf("%p\n", ptr);
bzero(ptr, MEMSIZE);
sleep(100);
munmap(ptr, MEMSIZE);
close(fd);
exit(1);
}
這次我們乾脆不用什麼父子程序的方式了,就一個程序,申請一段2G的mmap共享記憶體,然後初始化這段空間之後等待100秒,再解除影射所以我們需要在它sleep這100秒內檢查我們的系統記憶體使用,看看它用的是什麼空間?當然在這之前要先建立一個2G的檔案./mmapfile。結果如下:
[[email protected] ~]# dd if=/dev/zero of=mmapfile bs=1G count=2
[[email protected] ~]# echo 3 > /proc/sys/vm/drop_caches
[[email protected] ~]# free -g
total used free shared buffers cached
Mem: 126 30 95 0 0 16
-/+ buffers/cache: 14 111
Swap: 2 0 2
然後執行測試程式:[[email protected] ~]# ./mmap &
[1] 19157
0x7f1ae3635000
[[email protected] ~]# free -g
total used free shared buffers cached
Mem: 126 32 93 0 0 18
-/+ buffers/cache: 14 111
Swap: 2 0 2
[[email protected] ~]# echo 3 > /proc/sys/vm/drop_caches
[[email protected] ~]# free -g
total used free shared buffers cached
Mem: 126 32 93 0 0 18
-/+ buffers/cache: 14 111
Swap: 2 0 2
我們可以看到,在程式執行期間,cached一直為18G,比之前漲了2G,並且此時這段cache仍然無法被回收。然後我們等待100秒之後程式結束。[[email protected] ~]#
[1]+ Exit 1 ./mmap
[[email protected] ~]#
[[email protected] ~]# free -g
total used free shared buffers cached
Mem: 126 30 95 0 0 16
-/+ buffers/cache: 14 111
Swap: 2 0 2
程式退出之後,cached佔用的空間被釋放。這樣我們可以看到,使用mmap申請標誌狀態為MAP_SHARED的記憶體,核心也是使用的cache進行儲存的。在程序對相關記憶體沒有釋放之前,這段cache也是不能被正常釋放的。實際上,mmap的MAP_SHARED方式申請的記憶體,在核心中也是由tmpfs實現的。由此我們也可以推測,由於共享庫的只讀部分在記憶體中都是以mmap的MAP_SHARED方式進行管理,實際上它們也都是要佔用cache且無法被釋放的。
最後
我們通過三個測試例子,發現Linux系統記憶體中的cache並不是在所有情況下都能被釋放當做空閒空間用的。並且也也明確了,即使可以釋放cache,也並不是對系統來說沒有成本的。總結一下要點,我們應該記得這樣幾點:
當cache作為檔案快取被釋放的時候會引發IO變高,這是cache加快檔案訪問速度所要付出的成本。
tmpfs中儲存的檔案會佔用cache空間,除非檔案刪除否則這個cache不會被自動釋放。
使用shmget方式申請的共享記憶體會佔用cache空間,除非共享記憶體被ipcrm或者使用shmctl去IPC_RMID,否則相關的cache空間都不會被自動釋放。
使用mmap方法申請的MAP_SHARED標誌的記憶體會佔用cache空間,除非程序將這段記憶體munmap,否則相關的cache空間都不會被自動釋放。
實際上shmget、mmap的共享記憶體,在核心層都是通過tmpfs實現的,tmpfs實現的儲存用的都是cache。
當理解了這些的時候,希望大家對free命令的理解可以達到我們說的第三個層次。我們應該明白,記憶體的使用並不是簡單的概念,cache也並不是真的可以當成空閒空間用的。如果我們要真正深刻理解你的系統上的記憶體到底使用的是否合理,是需要理解清楚很多更細節知識,並且對相關業務的實現做更細節判斷的。我們當前實驗場景是Centos 6的環境,不同版本的Linux的free現實的狀態可能不一樣,大家可以自己去找出不同的原因。
當然,本文所述的也不是所有的cache不能被釋放的情形。那麼,在你的應用場景下,還有那些cache不能被釋放的場景呢?
參考:http://liwei.life/2016/04/26/linux%E5%86%85%E5%AD%98%E4%B8%AD%E7%9A%84cache%E7%9C%9F%E7%9A%84%E8%83%BD%E8%A2%AB%E5%9B%9E%E6%94%B6%E4%B9%88%EF%BC%9F/
http://blog.yufeng.info/archives/2456
相關推薦
linux記憶體佔用問題調查——cached
一、問題描述: 線上centos伺服器檢視內容使用情況: [[email protected] ~]# free -g total used free shared buffers cache
linux 記憶體佔用情況檢視並優化
1. 使用top 檢視記憶體的佔用情況,該命令類似於windows系統的記憶體管理器, 然後鍵入"M"命令根據記憶體的佔用情況降序排列,看看記憶體主要由哪些程序佔用。("P"是CPU佔用情況降序排列) 2.再使用free -m卻還有6.1G被佔用(記憶體總共8G),仔細
正確理解Linux記憶體佔用過高的問題
最近有個月經問題,老有人問為何開機後,還沒有其他服務,mem就被用完了?是不是記憶體洩露?是否要重啟服務?只能說不要看現象,要看本質才能找到問題的根源。往往給出這樣的結果,懷疑記憶體用了90%:Mem: 4146788k total, 3825536k used, 3212
如何理解Linux下,使用top命令看到記憶體佔用情況
linux 下使用top命令之後看到記憶體佔用情況如下: Mem: 32849260k total, 32630656k used, 218604k free, 445512k buffers Swap: 0k total, 0k used,
使用python進行Linux伺服器監測,畫CPU使用率和記憶體佔用圖
整體思想 使用python包psutil 獲取linux伺服器CPU、記憶體等相關資料 資料儲存在本地或者儲存在資料庫 讀取資料,使用python包pyecharts畫圖 使用Flask,頁面前端訪問 一、pstuil 的安裝和使用,儲存資料 pip inst
linux 程序佔用記憶體詳解
想必在linux上寫過程式的同學都有分析程序佔用多少記憶體的經歷,或者被問到這樣的問題——你的程式在執行時佔用了多少記憶體(實體記憶體)?通常我們可以通過top命令檢視程序佔用了多少記憶體。這裡我們可以看到VIRT、RES和SHR三個重要的指標,他們分別代表什麼意思呢?這是本文需要跟大家一
檢視 Linux memory 記憶體佔用
檢視 系統程序佔用記憶體 #!/bin/bash for proc in $(find /proc -maxdepth 1 -regex '/proc/[0-9]+'); do printf "%2d %5d %s\n" \ "$(cat $proc/oom_score)" \
檢視LINUX程序記憶體佔用情況
可以直接使用top命令後,檢視%MEM的內容。可以選擇按程序檢視或者按使用者檢視,如想檢視oracle使用者的程序記憶體使用情況的話可以使用如下的命令: (1)top top命令是Linux下常用的效能分析工具,能夠實時顯示系統中各個程序的資源佔用狀況,類似於W
系統技術非業餘研究 » Linux快取記憶體使用率調查
Linux的快取記憶體pagecache對效能的影響至關重要,但是實際系統中我們的利用率如何呢,特別是具體到每個裝置的利用情況。 從下圖我們可以很清楚的看到: 我們知道IO請求由vfs發起,經過pagecache快取,擋不住的就落實到io裝置去,那麼統計這個利用率就很簡單。 我們只要知道擋不住的
Linux一句命令之獲取CPU記憶體佔用
命令: while sleep 1; do ps -aux | grep firefox | awk 'NR==1{print "CPU: "$3"%",
利用linux的df和du命令檢視檔案和目錄的記憶體佔用
版權宣告:本文為博主原創文章,轉載請超連結註明出處。 https://blog.csdn.net/ljc1026774829/article/details/74935658 當磁碟大小超過標準時會有報警提示,這時如果掌握df和du命令是非常明智的選擇。 df
Linux下如何用/proc命令查詢程序狀態資訊——當前目錄,記憶體佔用,描述符等
參加阿里的面試,問到一個問題,如何在Linux下使用命令列查詢程序的狀態資訊,比如程序的當前目錄,程序的記憶體佔用等情況。當時的第一反應是使用top命令能夠得到所有的程序資訊。但是面試官好像不是很滿意,因此我回去之後查閱了相關的資料,發現可能他想問的/proc目錄,我這裡整
解決Linux buffer/cache記憶體佔用過高的辦法
-------原文地址 https://www.cnblogs.com/rocky-AGE-24/p/7629500.html --------本文只是搬運 在Linux系統中,我們經常用free命令來檢視系統記憶體的使用狀態。在一個RHEL6的系統上,fr
Linux TOP命令按記憶體佔用排序和按CPU佔用排序
先輸入top 然後 按P – 以 CPU 佔用率大小的順序排列程序列表 按M – 以記憶體佔用率大小的順序排列程序列表 top命令是Linux下常用的效能分析工具,比如cpu、記憶體的使用,能夠實時顯示系統中各個程序的資源佔用狀況,類似於Windows的工作管理員。
Linux系統記憶體佔用90%以上——解決方法
最近遇到一個疑問,不管是top,還是cat /proc/meminfo, 發現free記憶體基本快沒了,難道我們的程式出問題了?排查半天沒有事, 後來百度到相關帖子,記錄一下,這是Linux核心機制, Linux與Windows不同,會存在快取記憶體,通常叫做Cac
Linux中buff/cache記憶體佔用過高解決辦法
如何回收cache? Linux核心會在記憶體將要耗盡的時候,觸發記憶體回收的工作,以便釋放出記憶體給急需記憶體的程序使用。一般情況下,這個操作中主要的記憶體釋放都來自於對buffer/cache的釋放。尤其是被使用更多的cache空間。既然它主要用來做快
檢視LINUX程序記憶體佔用情況(轉)
可以直接使用top命令後,檢視%MEM的內容。可以選擇按程序檢視或者按使用者檢視,如想檢視oracle使用者的程序記憶體使用情況的話可以使用如下的命令: (1)top top命令是Linux下常用的效能分析工具,能夠實時顯示系統中各個程序的資源佔用狀況,類似於Windows的工作管理員 可
Linux程序佔用記憶體分析之pmap
檢視程序的記憶體映像資訊(report memory map of a process) # pmap 用法 pmap [options] PID [PID ...] 選項 Options: -x, --extended show
Linux系統used記憶體佔用很大,而實際系統中個程序並沒有佔用這麼多記憶體
問題 新裝伺服器,used記憶體佔用很大,而實際系統中個程序並沒有佔用這麼多記憶體 現象 top檢視下,used很大,如果有其他外部程式向監控伺服器的記憶體,used實際是個比較關鍵的指標,而該指標卻並沒有反應出伺服器實際佔用情況: 原因 實
Linux中Cache記憶體佔用過高解決辦法
在Linux系統中,我們經常用free命令來檢視系統記憶體的使用狀態。在一個RHEL6的系統上,free命令的顯示內容大概是這樣一個狀態: 這裡的預設顯示單位是kb,我的伺服器是128G記憶體,所以數字顯得比較大。這個命令幾乎是每一個使用過Linux的人必會的命令,但越是這樣的命令,似乎真正明白的人越少(