加上cache就對了...
B. linux free命令中buffer和cache的區別
linux free命令中buffer與cache的區別
~$ free
total used free shared buffers cached
Mem: 1025204 981636 43568 0 38244 387808
-/+ buffers/cache: 555584 469620
Swap: 1931256 162948 1768308 www.2cto.com
也可以通過$watch free看到動態信息
以上為free命令的輸出內容,從中可以得到當前系統內存使用情況.
系統的可用內存應該看第二行數據,
-buffers/cache=used-buffers-cached
+buffers/cache=free+buffers+cached
因為第一行的used包含了系統使用的buffer及cache,而free則沒包含buffer及cache,
這部分也是可以使用的部分.
如上所示555584為真正的系統使用內存情況,而469620為系統真正的可用內存情況.
下面介紹buffer與cache的差別:
A buffer is something that has yet to be "written" to disk.
A cache is something that has been "read" from the disk and stored for later use.
buffer: www.2cto.com
緩沖區,一個用於存儲速度不同步的設備或優先順序不同的設備之間傳輸數據
的區域。通過緩沖區,可以使進程之間的相互等待變少,從而使從速度慢的設備讀入數據
時,速度快的設備的操作進程不發生間斷。
cache:
高速緩存,是位於CPU與主內存間的一種容量較小但速度很高的存儲器。由於
CPU的速度遠高於主內存,CPU直接從內存中存取數據要等待一定時間周期, Cache中保存
著CPU剛用過或循環使用的一部分數據,當CPU再次使用該部分數據時可從Cache中直接調
用,這樣就減少了CPU的等待時間,提高了系統的效率。Cache又分為一級Cache(L1 Cache)
和二級Cache(L2 Cache),L1 Cache集成在CPU內部,L2 Cache早期一般是焊在主板上,現
在也都集成在CPU內部,常見的容量有256KB或512KB L2 Cache。
當你讀寫文件的時候,Linux內核為了提高讀寫性能與速度,會將文件在內存中進行緩存,
這部分內存就是Cache Memory(緩存內存)。即使你的程序運行結束後,Cache Memory也不會
自動釋放。這就會導致你在Linux系統中程序頻繁讀寫文件後,你會發現可用物理內存會很少。
其實這緩存內存(Cache Memory)在你需要使用內存的時候會自動釋放,所以你不必擔心沒有
內存可用。如果你希望手動去釋放Cache Memory也是有辦法的。
如何釋放Cache Memory(緩存內存), 用下面的命令可以釋放Cache Memory:
To free pagecache
$sync; echo 1>/proc/sys/vm/drop_caches
To free dentries and inodes: www.2cto.com
$sync; echo 2>/proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
$sync; echo 3>/proc/sys/vm/drop_caches
注意,釋放前最好sync一下,防止丟失數據。
free命令中的buffer和cache:(它們都是佔用內存):
buffer : 作為buffer cache的內存,是塊設備的讀寫緩沖區
cache: 作為page cache的內存, 文件系統的cache
C. free命令buff和cache的區別
buff
cache
Buffer:緩沖區,用於存儲速度不同步的設備或優先順序不同的設備之間傳輸數據;通過buffer可以減少進程間通信需要等待的時間,當存儲速度快的設備與存儲速度慢的設備進行通信時,存儲慢的數據先把數據存放到buffer,達到一定程度存儲快的設備再讀取buffer的數據,在此期間存儲快的設備CPU可搜索以干其他的事情。
Cache:緩存區,是高速緩存,是位於CPU和主內存之間的容量較小但速度很快的存儲器,因為CPU的速度遠遠高於主內存的速度,CPU從內存中讀取數據需等待很長的時間,而
Cache保存著CPU剛用過的數據或循環使用的部分數據,這時從Cache中讀取數據會更快,減少了CPU等待的時間,提高了系統的性能。
Buffer:一般是用在寫入磁碟的,例如:某個進程要求多個欄位被讀入,當所有要求的欄位被讀入之前已經讀入的欄位會先放到buffer中。 Cache並不是緩存文件的,而是緩存塊的(塊是I/O讀寫最小的單元);Cache一般會用在I/O請求上,如果多個進程要訪問某個文件,可以把此文件讀入Cache中,這樣下一個進程獲取CPU控制權並訪問此文件直接從Cache讀取,提高系統性能。
D. shell腳本中如何編寫程序med.sh,根據free命令的結果計算內存佔有率
#!/bin/bash
NowTime=`date +%F' '%T`
PhyMemPercent=`free -m|grep "Mem:"|awk '{printf("%2.2f\n",$3 * 100/$2)}'`
VirMemPercent=`free -m|grep "Swap"|awk '{printf("%2.2f\n",$3 * 100/$2)}'`
pyhmem=`free -m |grep "Mem:" |awk '{print $2}'`
virmem=`free -m |grep "Swap" |awk '{print $2}'`
Pyhmemused=`free -m |grep "Mem:" |awk '{print $3}'`
Virmemused=`free -m |grep "Swap" |awk '{print $3}'`
echo -n "$NowTime "
printf "%-16s%5s%8s%5s%12s%6s\n" "PhyMemory:total" "$pyhmem" " MB,used " "$Pyhmemused" " MB,percent " "$PhyMemPercent%"
# echo "PhyMemory:total $pyhmem MB,used $Pyhmemused MB,percent $PhyMemPercent%" >&3
echo -n "$NowTime "
printf "%-16s%5s%8s%5s%12s%6s\n" "VirMemory:total" "$virmem" " MB,used " "$Virmemused" " MB,percent " "$VirMemPercent%"
將以上復制到你的腳本中,執行下就會知道。
E. linux中free命令,total≠used+free,什麼原因呢
-m 表示以MB顯示
-G 表示用GB顯示
當你內存為3500M時候
你用-G就會只顯示3
明白我的意思不
就是 他並不是嚴格按照實際數量計算
用free 別加參數顯示的就是正確數值 但是 單位是kb
F. cfree命令編寫,請各位幫幫忙
第一題:
# include <stdio.h>
int main(void)
{
int a, b;
float x, y;
char c1, c2;
printf("請輸入兩個整數:\n");
scanf("%d %d", &a, &b);
printf("請輸入兩個小數:\n");
scanf("%f %f", &x, &y);
getchar(); //此處用來接受回車
printf("請輸入兩個字元:\n");
scanf("%c %c", &c1, &c2);
printf("各個變數的值為:\n");
printf("a = %d, b = %d\n", a, b);
printf("x = %f, y = %f\n", x, y);
printf("c1 = %c, c2 = %c\n", c1, c2);
return 0;
}
第二題:
# include <stdio.h>
int main(void)
{
char c1, c2;
printf("請輸入第一個字元並回車:\n");
c1 = getchar();
getchar(); // 此處用來接受回車
printf("請輸入第二個字元並回車:\n");
c2 = getchar();
printf("您輸入的兩個字元為:\n");
putchar(c1);
putchar('\n');
printf("%c", c2);
return 0;
}
第三題:
# include <stdio.h>
int main(void)
{
float a, b, c, d, x, y;
printf("請輸入a b c d的值:\n");
scanf("%f %f %f %f",&a, &b, &c, &d);
printf("請輸入x的值\n");
scanf("%f", &x);
y = x + ( (a-b) / (c+d) );
printf("y的值為:\n");
printf("y = %f", y);
return 0;
}
第四題:
# include <stdio.h>
# include <math.h>
int main(void)
{
float x, y;
printf("請輸入x(弧度制)的值\n");
scanf("%f", &x);
y = sin(x) + cos(x);
printf("角度數為:\n");
printf("%.2f\n", x);
printf("sin(x) + cos(x)的值y為:\n");
printf("y = %.2f", y);
return 0;
}
這些都是我自己打的,一定要給分哦!
G. linux下free命令結果如下,誰能幫我通俗地解釋下對應的意思
內存總共大小(total),
使用量(used)
剩餘內存(free)
被OS buffer住的內存。 (buffers)
被OS cache的內存(cached)
buffer是用於存放要輸出到disk(塊設備)的數據的
,而cache是存放從disk上讀出的數據。這二者是為了提高IO性能的,並由OS管理。
H. linux伺服器使用free命令顯示如下情況,是不是需要增加內存了
沒關系,free雖然少,因為都被cached了。我的機器24G內存,可以cache22G,這是linux內存管理的機制。並不影響使用,如果linux發現內存不夠用,會自己釋放cache,增加內存的。
I. linux free命令
Mem:表示物理內存統計
-/+ buffers/cached:表示物理內存的緩存統計
Swap:表示硬碟上交換分區的使用情況,
第1行 Mem:
total:表示物理內存總量。
used:表示總計分配給緩存(包含buffers 與cache )使用的數量,但其中可能部分緩存並未實際使用。
free:未被分配的內存。
shared:共享內存,一般系統不會用到,這里也不討論。
buffers:系統分配但未被使用的buffers 數量。
cached:系統分配但未被使用的cache 數量。buffer 與cache 的區別見後面。
total = used + free
第2行 -/+ buffers/cached:
used:也就是第一行中的used - buffers-cached 也是實際使用的內存總量。
free:未被使用的buffers 與cache 和未被分配的內存之和,這就是系統當前實際可用內存。
J. Linux裡面free -g命令作用是什麼
不帶任何選項運行 free 命令會顯示系統內存,包括空閑、已用、交換、緩沖、緩存和交換的內存總數。這個時候顯示的是位元組為單位。-G 參數加上去以後,所有顯示的內容就按照單位GB來顯示明白了嗎 查詢命令 看看《Linux就該這么學》 裡面有個專欄是 Linux命令大全(手冊