Linux-手动释放linux内存cache
操作
執行以下命令
[root@entel2 ~]# sync [root@entel2 ~]# echo 3 > /proc/sys/vm/drop_caches重新查詢
探究
free的用法
[root@entel2 rh]# free -help free: invalid option -- 'h' usage: free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay] [-c count] [-V]-b,-k,-m,-g show output in bytes, KB, MB, or GB -l show detailed low and high memory statistics -o use old format (no -/+buffers/cache line) -t display total for RAM + swap -s update every [delay] seconds -c update [count] times -V display version information and exit以M為單位顯示內存
我們先來探究一下參數含義
- 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
當在Linux下頻繁存取文件后,物理內存會很快被用光,當程序結束后,內存不會被正常釋放,而是一直作為caching。
手動釋放緩存
/proc是一個虛擬文件系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通信的一種手段。也就是說可以通過修改/proc中的文件,來對當前kernel的行為做出調整。
那么我們可以通過調整/proc/sys/vm/drop_caches來釋放內存。操作如下:
# cat /proc/sys/vm/drop_caches 0首先,/proc/sys/vm/drop_caches的值,默認為0。
# sync手動執行sync命令(描述:sync 命令運行 sync 子例程。如果必須停止系統,則運行sync 命令以確保文件系統的完整性。sync 命令將所有未寫的系統緩沖區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件)
# echo 3 > /proc/sys/vm/drop_caches # cat /proc/sys/vm/drop_caches 3將/proc/sys/vm/drop_caches值設為3
/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 first
意見總結
從man可以看到,這值從2.6.16以后的核心版本才提供,也就是老版的操作系統,如紅旗DC 5.0、RHEL 4.x之前的版本都沒有;若對于系統內存是否夠用的觀察,我還是原意去看swap的使用率和si/so兩個值的大小;
用戶常見的疑問是,為什么free這么小,是否關閉應用后內存沒有釋放?但實際上,我們都知道這是因為Linux對內存的管理與Windows不同,free小并不是說內存不夠用了,應該看的是free的第二行最后一個值:-/+ buffers/cache: 58 191,這才是系統可用的內存大小。
實際項目中告訴我們,如果因為是應用有像內存泄露、溢出的問題,從swap的使用情況是可以比較快速可以判斷的,但free上面反而比較難查看。
一般情況下,應用在系統上穩定運行了,free值也會保持在一個穩定值的,雖然看上去可能比較小。
當發生內存不足、應用獲取不到可用內存、OOM錯誤等問題時,還是更應該去分析應用方面的原因,如用戶量太大導致內存不足、發生應用內存溢出等情況,否則,清空buffer,強制騰出free的大小,可能只是把問題給暫時屏蔽了。
我覺得,排除內存不足的情況外,除非是在軟件開發階段,需要臨時清掉buffer,以判斷應用的內存使用情況;或應用已經不再提供支持,即使應用對內存的時候確實有問題,而且無法避免的情況下,才考慮定時清空buffer。(可惜,這樣的應用通常都是運行在老的操作系統版本上,上面的操作也解決不了)。而生產環境下的服務器可以不考慮手工釋放內存,這樣會帶來更多的問題。記住內存是拿來用的,不是拿來看的。
我們看linux,只要不用swap的交換空間,就不用擔心自己的內存太少。如果常常swap用很多,可能你就要考慮加物理內存了,這也是linux看內存是否夠用的標準.
總結
以上是生活随笔為你收集整理的Linux-手动释放linux内存cache的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux-使用 Find 命令找到那些
- 下一篇: Oracle海量数据优化-01分区的渊源