中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何手工釋放linux內存

發布時間:2021-11-05 09:46:32 來源:億速云 閱讀:121 作者:柒染 欄目:建站服務器

如何手工釋放linux內存,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。


手工釋放linux內存——/proc/sys/vm/drop_cache

linux的內存查看:

[root@localhost 0.1.0]# free -m
                   total       used       free     shared    buffers     cached
Mem:          4032        694       3337          0          0         25

需要說明的是,mem的used=free+buffers+cached,有些情況是cached占用很多資源,算起來數值就是不對,其實不影響實際使用,下面轉載部分有說明如何清除cached的占用(實際上可以不清除,不會影響實際使用)

當在Linux下頻繁存取文件后,物理內存會很快被用光,當程序結束后,內存不會被正常釋放,而是一直作為caching。這個問題,貌似有不少人在問,不過都沒有看到有什么很好解決的辦法。那么我來談談這個問題。

一、通常情況

先來說說free命令:
引用[root@server ~]# 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為86MB,buffer和cached分別為10MB,94MB。


那么我們來看看,如果我執行復制文件,內存會發生什么變化.
引用[root@server ~]# cp -r /etc ~/test/
[root@server ~]# 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吃掉了。別緊張,這是為了提高文件讀取效率的做法。

為了提高磁盤存取效率,Linux做了一些精心的設計,除了對dentry進行緩存(用于VFS,加速文件路徑名到inode的轉換),還采取了兩 種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,后者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。
那么有人說過段時間,linux會自動釋放掉所用的內存。等待一段時間后,我們使用free再來試試,看看是否有釋放?


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


似乎沒有任何變化。(實際情況下,內存的管理還與Swap有關)
那么我能否手動釋放掉這些內存呢?回答是可以的!

二、手動釋放緩存
/proc是一個虛擬文件系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通信的一種手段。也就是說可以通過修改/proc 中的文件,來對當前kernel的行為做出調整。那么我們可以通過調整/proc/sys/vm/drop_caches來釋放內存。操作如下:


[root@server test]# cat /proc/sys/vm/drop_caches
0
首先,/proc/sys/vm/drop_caches的值,默認為0。


[root@server 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 first.


三、我的意見
上述文章就長期以來很多用戶對Linux內存管理方面的疑問,給出了一個比較“直觀”的回復,我更覺得有點像是核心開發小組的妥協。
對于是否需要使用這個值,或向用戶提及這個值,我是有保留意見的:

1、從man可以看到,這值從2.6.16以后的核心版本才提供,也就是老版的操作系統,如紅旗DC 5.0、RHEL 4.x之前的版本都沒有;
2、若對于系統內存是否夠用的觀察,我還是原意去看swap的使用率和si/so兩個值的大小;


用戶常見的疑問是,為什么free這么小,是否關閉應用后內存沒有釋放?
但實際上,我們都知道這是因為Linux對內存的管理與Windows不同,free小并不是說內存不夠用了,應該看的是free的第二行最后一個值:"-/+ buffers/cache: 58 191" 這才是系統可用的內存大小。


實際項目中告訴我們,如果因為是應用有像內存泄露、溢出的問題,從swap的使用情況是可以比較快速可以判斷的,但free上面反而比較難查看。相反,如 果在這個時候,我們告訴用戶,修改系統的一個值,“可以”釋放內存,free就大了。用戶會怎么想?不會覺得操作系統“有問題”嗎?所以說,我覺得既然核 心是可以快速清空buffer或cache,也不難做到(這從上面的操作中可以明顯看到),但核心并沒有這樣做(默認值是0),我們就不應該隨便去改變 它。一般情況下,應用在系統上穩定運行了,free值也會保持在一個穩定值的,雖然看上去可能比較小。當發生內存不足、應用獲取不到可用內存、OOM錯誤 等問題時,還是更應該去分析應用方面的原因,如用戶量太大導致內存不足、發生應用內存溢出等情況,否則,清空buffer,強制騰出free的大小,可能 只是把問題給暫時屏蔽了。


我覺得,排除內存不足的情況外,除非是在軟件開發階段,需要臨時清掉buffer,以判斷應用的內存使用情況;或應用已經不再提供支持,即使應用對內存的 時候確實有問題,而且無法避免的情況下,才考慮定時清空buffer。(可惜,這樣的應用通常都是運行在老的操作系統版本上,上面的操作也解決不了)。

測試

[root@testserver ~]# uname -a
Linux testserver 2.6.18-164.el5 #1 SMP Thu Sep 3 03:28:30 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux


[root@testserver ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          2013       1661        352          0        223       1206
-/+ buffers/cache:        231       1782
Swap:         2047          0       2047


[root@testserver ~]# sync
[root@testserver ~]# sync
[root@testserver ~]# cat /proc/sys/vm/drop_caches
0
[root@testserver ~]# echo 3 > /proc/sys/vm/drop_caches
[root@testserver ~]# cat /proc/sys/vm/drop_caches    
3
[root@testserver ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          2013        100       1913          0          0         14
-/+ buffers/cache:         85       1927
Swap:         2047          0       2047
[root@testserver ~]#

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

应城市| 大石桥市| 建平县| 安远县| 承德市| 崇礼县| 遂宁市| 临颍县| 于都县| 三穗县| 天祝| 贵溪市| 安顺市| 镇赉县| 望谟县| 北票市| 莲花县| 兖州市| 天峻县| 灵寿县| 隆德县| 遂溪县| 根河市| 漳州市| 合作市| 苍溪县| 富蕴县| 九江县| 瑞丽市| 龙游县| 谢通门县| 南京市| 富顺县| 凉城县| 社旗县| 玛沁县| 抚顺市| 定安县| 乌兰县| 庄浪县| 望谟县|