當前位置:首頁 » 操作系統 » 釋放linux內存

釋放linux內存

發布時間: 2022-08-15 05:19:23

1. linux 如何釋放虛擬內存

swap釋放:
用swapoff -a 關閉虛擬內存(釋放)
再用swapon -a 打開虛擬內存
註:swapon / swapoff 必須要root許可權才能使用

2. Linux內核中如何申請和釋放內存

申請內存:
void *kmalloc(size_t size, int flags)
kmalloc函數和malloc函數相似,它有兩個參數,一個參數是size,即申請內存塊的大小,這個參數比較簡單,就像malloc中的參數一樣。第二個參數是一個標志,在裡面可以指定優先權之類的信息。在Linux中,有以下的一些優先權:
GFP_KERNEL,它的意思是該內存分配是由運行在內核模式的進程調用的,即當內存低於min_free_pages的時候可以讓該進程進入睡眠;
GFP_ATOMIC,原子性的內存分配允許在實際內存低於min_free_pages時繼續分配內存給進程。
GFP_DMA:此標志位需要和GFP_KERNEL、GFP_ATOMIC等一起使用,用來申請用於直接內存訪問的內存頁。
釋放:
Kfree(const void *objp) const void *objp=為需要釋放的內存空間指針

3. Linux下如何釋放內存

首先,查看/proc/sys/vm/drop_caches的值
[root@server test]# cat /proc/sys/vm/drop_caches
0
值默認為0
然後,運行sync命令
[root@server test]# sync
手動執行sync命令(描述:sync 命令運行 sync 子常式。如果必須停止系統,則運行sync 命令以確保文件系統的完整性。sync 命令將所有未寫的系統緩沖區寫到磁碟中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件)
最後,輸入手動釋放內存的命令
[root@server test]# echo 1 > /proc/sys/vm/drop_caches

drop_caches的值可以是0-3之間的數字,代表不同的含義:
0:不釋放(系統默認值)
1:釋放頁緩存
2:釋放dentries和inodes
3:釋放所有緩存

釋放完內存後改回去讓系統重新自動分配內存
echo 0 >/proc/sys/vm/drop_caches

free -m #看內存是否已經釋放掉了。

如果我們需要釋放所有緩存,就輸入下面的命令:
[root@server test]# echo 3 > /proc/sys/vm/drop_caches

4. Linux用戶進程是如何釋放內存的

如果內存夠,進程不去主動回收,內存是不會釋放的
Linux系統的緩存機制是相當先進的,他會針對dentry(用於VFS,加速文件路徑名到inode的轉換)、Buffer Cache(針對磁碟塊的讀寫)和Page Cache(針對文件inode的讀寫)進行緩存操作。但是在進行了大量文件操作之後,緩存會把內存資源基本用光。但實際上我們文件操作已經完成,這部分緩存已經用不到了。

5. linux上如何閉掉一部分內存

在Linux系統下,_般不需要去釋放內存,因為系統已將內存管理的很好。但也有例外,有時內存會被緩存佔掉,導致系統使用SWAP空間影響性能,這時,有必要來_動進_Linux下釋放內存的操作,其實是釋放緩存的操作了。
proc是_個虛擬_件系統,我們可通過對它的讀寫操作做為與kernel實體間進_通信的_種_段.也就是說可通過修改/proc中的_件,來對當前kernel的_為做出調整.那麼可通過調整/proc/sys/vm/drop_caches來釋放內存。

6. 如何手工釋放linux內存

一、通常情況

先來說說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

首先,/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。

7. 如何為linux釋放內存和緩存

在Linux系統下,我們一般不需要去釋放內存,因為系統已經將內存管理的很好。但是凡事也有例外,有的時候內存會被緩存佔用掉,導致系統使用SWAP空間影響性能,此時就需要執行釋放內存(清理緩存)的操作了。
Linux系統的緩存機制是相當先進的,他會針對dentry(用於VFS,加速文件路徑名到inode的轉換)、Buffer Cache(針對磁碟塊的讀寫)和Page Cache(針對文件inode的讀寫)進行緩存操作。但是在進行了大量文件操作之後,緩存會把內存資源基本用光。但實際上我們文件操作已經完成,這部分緩存已經用不到了。這個時候,我們難道只能眼睜睜的看著緩存把內存空間占據掉么?
所以,我們還是有必要來手動進行Linux下釋放內存的操作,其實也就是釋放緩存的操作了。
要達到釋放緩存的目的,我們首先需要了解下關鍵的配置文件/proc/sys/vm/drop_caches。這個文件中記錄了緩存釋放的參數,默認值為0,也就是不釋放緩存。他的值可以為0~3之間的任意數字,代表著不同的含義:
0 – 不釋放
1 – 釋放頁緩存
2 – 釋放dentries和inodes
3 – 釋放所有緩存
知道了參數後,我們就可以根據我們的需要,使用下面的指令來進行操作。
首先我們需要使用sync指令,將所有未寫的系統緩沖區寫到磁碟中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。否則在釋放緩存的過程中,可能會丟失未保存的文件。

#sync

接下來,我們需要將需要的參數寫進/proc/sys/vm/drop_caches文件中,比如我們需要釋放所有緩存,就輸入下面的命令:

#echo 3 > /proc/sys/vm/drop_caches

此指令輸入後會立即生效,可以查詢現在的可用內存明顯的變多了。
要查詢當前緩存釋放的參數,可以輸入下面的指令:

#cat /proc/sys/vm/drop_caches
#free -m

對於清除swap,只有先關閉swap了,用:
#swapoff -a
而後啟用swap,因為只是清除,不是說不要用swap的嘛 :
#swapon -a

http://blog.sina.com.cn/s/blog_539d6e0c0100ys3o.html

Linux 自動釋放內存腳本
發表於119 天前 ? 技術文章 ? 暫無評論

腳本下載地址:Cached
腳本內容:
#! /bin/bash
# cache釋放:
# To free pagecache:
sync
sync
#echo 1 > /proc/sys/vm/drop_caches
# To free dentries and inodes:
#echo 2 > /proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches
# 說明,釋放前最好sync一下,防止丟數據。
利用系統crontab實現每天自動運行:
crontab -e
輸入以下內容:
00 00 * * * /root/Cached.sh
每天0點釋放一次內存,這個時間可以根據自己需要自行設置,我的伺服器情況是每天自動釋放一次就OK了
在設置這個腳本的時候,發生了一系列的問題
在測試運行./Cached.sh時提示錯誤:Permission denied 許可權的問題
解決方法:
chmod +x .Cached.sh

chmod 777 Cached.sh
接著又出現錯誤提示:/bin/bash^M: bad interpreter: No such file or directory
這是因為在windows下編輯的.sh文件編碼格式和linux下不一樣,轉換一下編碼格式即可:
dos2unix Cached.sh
http://blog.sinorain.com/archives/157

8. 如何在Linux操作系統中手工釋放內存緩存

要達到釋放緩存的目的,我們首先需要了解下關鍵的配置文件/proc/sys/vm/drop_caches。這個文件中記錄了緩存釋放的參數,默認值為0,也就是不釋放緩存。他的值可以為0~3之間的任意數字,代表著不同的含義:
0

不釋放
1

釋放頁緩存
2

釋放dentries和inodes
3

釋放所有緩存
知道了參數後,我們就可以根據我們的需要,使用下面的指令來進行操作。
首先我們需要使用sync指令,將所有未寫的系統緩沖區寫到磁碟中,包含已修改的
i-node、已延遲的塊
I/O
和讀寫映射文件。否則在釋放緩存的過程中,可能會丟失未保存的文件。
#sync
接下來,我們需要將需要的參數寫進/proc/sys/vm/drop_caches文件中,比如我們需要釋放所有緩存,就輸入下面的命令:
#echo
3
>
/proc/sys/vm/drop_caches
此指令輸入後會立即生效,可以查詢現在的可用內存明顯的變多了。
要查詢當前緩存釋放的參數,可以輸入下面的指令:
#cat
/proc/sys/vm/drop_caches
下面我們來看一個實際測試:
先看看內存使用狀況
[root@node1
~]#
free
-m
total
used
free
shared
buffers
cached
Mem:
8004
6557
1446
0
163
5630
-/+
buffers/cache:
763
7240
Swap:
1983
0
1983
把內存里的數據暫時寫到硬碟里
[root@node1
~]#
sync
修改/proc/sys/vm/drop_caches文件
[root@node1
~]#
echo
3
>
/proc/sys/vm/drop_caches
[root@node1
~]#
cat
/proc/sys/vm/drop_caches
再看內存,終於釋放出來了。
[root@node1
~]#
free
-m
total
used
free
shared
buffers
cached
Mem:
8004
631
7372
0
0
60
-/+
buffers/cache:
570
7433
Swap:
1983
0
1983

9. linux清理內存緩存命令

看緩存的命令
free -m
清理緩存的命令
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
echo 0 是不釋放緩存
echo 1 是釋放頁緩存 《Linux就該這么學》
ehco 2 是釋放dentries和inodes緩存
echo 3 是釋放 1 和 2 中說道的的所有緩存

10. linux 清除緩存 釋放內存

這里的默認顯示單位是kb,我的伺服器是128G內存,所以數字顯得比較大。這個命令幾乎是每一個使用過Linux的人必會的命令,但越是這樣的命令,似乎真正明白的人越少(我是說比例越少)。一般情況下,對此命令輸出的理解可以分這幾個層次:

1.不了解。這樣的人的第一反應是:天啊,內存用了好多,70個多G,可是我幾乎沒有運行什麼大程序啊?為什麼會這樣?Linux好占內存!

2.自以為很了解。這樣的人一般評估過會說:嗯,根據我專業的眼光看的出來,內存才用了17G左右,還有很多剩餘內存可用。buffers/cache佔用的較多,說明系統中有進程曾經讀寫過文件,但是不要緊,這部分內存是當空閑來用的。

3.真的很了解。這種人的反應反而讓人感覺最不懂Linux,他們的反應是:free顯示的是這樣,好吧我知道了。神馬?你問我這些內存夠不夠,我當然不知道啦!我特么怎麼知道你程序怎麼寫的?

根據目前網路上技術文檔的內容,我相信絕大多數了解一點Linux的人應該處在第二種層次。大家普遍認為,buffers和cached所佔用的內存空間是可以在內存壓力較大的時候被釋放當做空閑空間用的。但真的是這樣么?在論證這個題目之前,我們先簡要介紹一下buffers和cached是什麼意思:

什麼是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。

明白了這兩套緩存系統的區別,就可以理解它們究竟都可以用來做什麼了。

什麼是page cache?

Page cache主要用來作為文件系統上的文件數據的緩存來用,尤其是針對當進程對文件有read/write操作的時候。如果你仔細想想的話,作為可以映射文件到內存的系統調用:mmap是不是很自然的也應該用到page cache?在當前的系統實現里,page cache也被作為其它文件類型的緩存設備來用,所以事實上page cache也負責了大部分的塊設備文件的緩存工作。

什麼是buffer cache?

Buffer cache則主要是設計用來在系統對塊設備進行讀寫的時候,對塊進行數據緩存的系統來使用。這意味著某些對塊的操作會使用buffer cache進行緩存,比如我們在格式化文件系統的時候。一般情況下兩個緩存系統是一起配合使用的,比如當我們對一個文件進行寫操作的時候,page cache的內容會被改變,而buffer cache則可以用來將page標記為不同的緩沖區,並記錄是哪一個緩沖區被修改了。這樣,內核在後續執行臟數據的回寫(writeback)時,就不用將整個page寫回,而只需要寫回修改的部分即可。

如何回收cache?

Linux內核會在內存將要耗盡的時候,觸發內存回收的工作,以便釋放出內存給急需內存的進程使用。一般情況下,這個操作中主要的內存釋放都來自於對buffer/cache的釋放。尤其是被使用更多的cache空間。既然它主要用來做緩存,只是在內存夠用的時候加快進程對文件的讀寫速度,那麼在內存壓力較大的情況下,當然有必要清空釋放cache,作為free空間分給相關進程使用。所以一般情況下,我們認為buffer/cache空間可以被釋放,這個理解是正確的。

熱點內容
安卓手機安裝好圖標包如何使用 發布:2024-04-18 22:00:23 瀏覽:451
國際服刺激戰場怎麼在伺服器上 發布:2024-04-18 21:55:48 瀏覽:535
怎樣購買蘋果存儲空間 發布:2024-04-18 21:51:47 瀏覽:434
web伺服器怎麼搭建手機 發布:2024-04-18 21:46:19 瀏覽:800
伺服器與普通電腦裝系統區別 發布:2024-04-18 21:46:01 瀏覽:528
第一彈視頻緩存 發布:2024-04-18 21:24:08 瀏覽:732
飽和溶液的電極如何配置 發布:2024-04-18 21:15:39 瀏覽:202
ftp網站下載工具 發布:2024-04-18 21:02:45 瀏覽:48
我的世界手游友好的伺服器 發布:2024-04-18 20:57:20 瀏覽:474
php用什麼打開 發布:2024-04-18 20:09:36 瀏覽:732