1. 程式人生 > >轉載-linux下釋放被cache佔用的實體記憶體

轉載-linux下釋放被cache佔用的實體記憶體

當你在Linux下頻繁存取檔案後,實體記憶體會很快被用光,當程式結束後,記憶體不會被正常釋放,而是一直作為caching.這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法.那麼我來談談這個問題.

先來說說free命令

[[email protected] ~]# free -m
total used free shared buffers cached
Mem: 249 163 86 0 10 94
-/+ buffers/cache: 58 191
Swap: 511 0 511

其中:

total 記憶體總數

used 已經使用的記憶體數

free 空閒的記憶體數

shared 多個程序共享的記憶體總額

buffers Buffer Cache和cached Page Cache 磁碟快取的大小

-buffers/cache 的記憶體數:used - buffers - cached

+buffers/cache 的記憶體數:free + buffers + cached

可用的memory=free memory+buffers+cached

有了這個基礎後,可以得知,我現在used為163MB,free為86,buffer和cached分別為10,94

那麼我們來看看,如果我執行復制檔案,記憶體會發生什麼變化.

[[email protected]

~]# cp -r /etc ~/test/
[[email protected] ~]# free -m
total used free shared buffers cached
Mem: 249 244 4 0 8 174
-/+ buffers/cache: 62 187
Swap: 511 0 511

在命令執行結束後,used為244MB,free為4MB,buffers為8MB,cached為174MB,天吶都被cached吃掉了.別緊張,這是為了提高檔案讀取效率的做法.

引用http://www.wujianrong.com/archives/2007/09/linux_free.html

“為了提高磁碟存取效率, Linux做了一些精心的設計, 除了對dentry進行快取(用於VFS,加速檔案路徑名到inode的轉換), 還採取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁碟塊的讀寫,後者針對檔案inode的讀寫。這些Cache有效縮短了 I/O系統呼叫(比如read,write,getdents)的時間。”

那麼有人說過段時間,linux會自動釋放掉所用的記憶體,我們使用free再來試試,看看是否有釋放>?

[[email protected] test]# free -m
total used free shared buffers cached
Mem: 249 244 5 0 8 174
-/+ buffers/cache: 61 188
Swap: 511 0 511

MS沒有任何變化,那麼我能否手動釋放掉這些記憶體呢?回答是可以的!

/proc是一個虛擬檔案系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通訊的一種手段.也就是說可以通過修改/proc中的檔案,來對當前kernel的行為做出調整.那麼我們可以通過調整/proc/sys/vm/drop_caches來釋放記憶體.操作如下:

[[email protected] test]# cat /proc/sys/vm/drop_caches
0
首先,/proc/sys/vm/drop_caches的值,預設為0

[[email protected] test]# sync

手動執行sync命令(描述:sync 命令執行 sync 子例程。如果必須停止系統,則執行 sync 命令以確保檔案系統的完整性。sync 命令將所有未寫的系統緩衝區寫到磁碟中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫對映檔案)

[root@server test]# echo 3 > /proc/sys/vm/drop_caches 
[root@server test]# cat /proc/sys/vm/drop_caches 
3 

將/proc/sys/vm/drop_caches值設為3

[root@server test]# free -m 
total used free shared buffers cached 
Mem: 249 66 182 0 0 11 
-/+ buffers/cache: 55 194 
Swap: 511 0 511 

再來執行free命令,發現現在的used為66MB,free為182MB,buffers為0MB,cached為11MB.那麼有效的釋放了buffer和cache.

有關/proc/sys/vm/drop_caches的用法在下面進行了說明

/proc/sys/vm/drop_caches (since Linux 2.6.16) 
Writing to this file causes the kernel to drop clean caches, 
dentries and inodes from memory, causing that memory to become 
free. 

To free pagecache, use echo 1 > /proc/sys/vm/drop_caches; to 
free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches; 
to free pagecache, dentries and inodes, use echo 3 > 
/proc/sys/vm/drop_caches. 

Because this is a non-destructive operation and dirty objects 
are not freeable, the user should run sync(8) first

相關推薦

轉載-linux釋放cache佔用實體記憶體

當你在Linux下頻繁存取檔案後,實體記憶體會很快被用光,當程式結束後,記憶體不會被正常釋放,而是一直作為caching.這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法.那麼我來談談這個問題. 先來說說free命令 [[email

Linux佔用解決

有時候關閉軟體後,後臺程序死掉,導致埠被佔用。下面以JBoss埠8083被佔用為例,列出詳細解決過程。 解決方法: 1.查詢被佔用的埠 netstat -tln netstat -tln | grep 8083 netstat -tln 檢視埠使用情況,而net

如何釋放linux cache佔用記憶體

[[email protected] ~]# free -m              total       used       free     shared    buffers     cached Mem:          3792       3663        128    

如何理解Linux,使用top命令看到記憶體佔用情況

linux 下使用top命令之後看到記憶體佔用情況如下: Mem: 32849260k total, 32630656k used, 218604k free, 445512k buffers Swap: 0k total, 0k used,

[轉載]Linux的cut選取命令詳解

定義 正如其名,cut的工作就是“剪”,具體的說就是在檔案中負責剪下資料用的。cut是以每一行為一個處理物件的,這種機制和sed是一樣的 剪下依據 cut命令主要是接受三個定位方法: 第一,位元組(bytes),用選項-b 第二,字元(characters)

[轉載]linuxmysql 8.0忘記密碼後重置密碼

實在扎心,關鍵時刻忘記了密碼! 1、免密碼登陸 找到mysql配置檔案:my.cnf, 在【mysqld】模組新增:skip-grant-tables 儲存退出; 2、使配置生效 重啟mysql服務: service mysqld restart; 3、

Linux邏輯地址-線性地址-實體地址圖解

轉載:http://blog.csdn.net/wxzking/article/details/5905214 一、邏輯地址轉線性地址 機器語言指令中出現的記憶體地址,都是邏輯地址,需要轉換成線性地址,再經過MMU(CPU中的記憶體管理單元)轉換成實體地址才能夠被訪問

Cache佔用過多記憶體導致Linux系統記憶體不足問題排查

問題描述 Linux伺服器記憶體使用量超過閾值,觸發報警。 問題排查 首先,通過free命令觀察系統的記憶體使用情況,顯示如下: total       used       free     shared    buffers     cached Mem:   

如何在Linux找出大量佔用CPU的java執行緒

首先獲取jvm的程序pid。 [[email protected] ~]$ jps -v 26048 Server -Xms256m -Xmx2048m -Dweblogic.Name=bi_server1 -Djava.security.policy=/home

linux使用free命令檢視實際記憶體佔用(可用記憶體

轉:http://blog.is36.com/linux_free_command_for_memory/ linux下在終端環境下可以使用free命令看到系統實際使用記憶體的情況,一般用free -m方式檢視記憶體佔用情況(兆為單位)。而系統實際可用記憶體是不是f

linux查詢java程序佔用CPU過高原因

1. 查詢程序 top檢視程序佔用資源情況 明顯看出java的兩個程序22714,12406佔用過高cpu. 2.查詢執行緒 使用top -H -p <pid>檢視執行緒佔用情況

Linux使用java獲取cpu、記憶體使用率

原文地址:http://www.voidcn.com/article/p-yehrvmep-uo.html 思路如下:Linux系統中可以用top命令檢視程序使用CPU和記憶體情況,通過Runtime類的exec()方法執行命令"top”,獲取"top"的輸出,從而得到CPU和記憶體的使用情況。

sql server 佔用實體記憶體過大的問題

轉載   https://www.cnblogs.com/visibleisfalse/p/6170640.html   前段時間部署了一臺測試機,將網站、資料庫、介面都等很多應用都部署在同一臺機器上,而且這臺機器其實只是一臺普通的電腦,8g記憶體而已。   後來

linux統計程式的最大記憶體使用情況

在記憶體的使用中,有程式本身所佔的記憶體。也有程式動態分配的記憶體。裡面還可能是系統呼叫外部的工具,又會佔用了額外的記憶體。從使用者角度來看,可以認為裡面是個黑盒子。啟動了一個程式,卻不知道該程式的峰值記憶體使用量。 用什麼方法來知道最多使用了多少記憶體呢?其

Linuxjenkins改埠、解決記憶體溢位、版本升級

1、新版本的jenkins修改埠 新版本jenkins的配置檔案在/etc/sysconfig/jenkins vi /etc/sysconfig/jenkins 找到JENKINS_PORT="80

Linux IPC 之 System V 共享記憶體的使用和原理初探

前言 總結一下最近對於共享記憶體的學習, 可能比較淺顯或者有疏漏, 歡迎指正! 原理初探 我們知道, 程序空間相互隔離, 互相對立, 但是共享記憶體允許多個程序可以訪問同一塊記憶體來達到程序間通訊的目的. 共享記憶體是最高效的 IPC 機制, 它不涉及任何程

linux統計所有程序總共佔用多少記憶體

原文地址:http://linuxperf.com/?p=143 很多人通過累加 “ps  aux” 命令顯示的 RSS 列來統計全部程序總共佔用的實體記憶體大小,這是不對的。RSS(resident set size)表示常駐記憶體的大小,但是由於不同的程序之間會共享記

LinuxC程式設計-----IO/檔案操作/記憶體對映 實現簡單記錄儲存(3)

利用linux下的檔案記憶體對映可以實現程序共享資料,我們可以把一個檔案對映到虛擬記憶體中使多個程序進行共享, 到這裡我們大概能想到他能應用到的領域 是很廣泛的  主要涉及到 mmap  munmap   msync 三個函式的應用 下面貼程式碼  下面一段程式碼是為檔案

LinuxC獲取CPU使用率和記憶體和網路丟包率

在Linux中如果要監視一個程序的執行情況,如檢視它的CPU使用效率和記憶體使用情況,就需要從系統的 /proc目錄的讀取一些系統資訊。然後分析得到結果,proc檔案系統是一個偽檔案系統,它只存在記憶體當中,而不佔用外存空間。它以檔案系統的方式為訪問系統核心資料的操作提供介

arm linux交叉編譯valgrind工具進行記憶體洩露檢測和效能分析

C/C++等底層語言在提供強大功能及效能的同時,其靈活的記憶體訪問也帶來了各種糾結的問題。如果crash的地方正是記憶體使用錯誤的地方,說明你人品好。如果crash的地方記憶體明顯不是consistent的,或者記憶體管理資訊都已被破壞,編譯器不能發現這些問題,.執行時才能捕獲到這些錯誤並且還是隨機出現的,那