linux 手工釋放內存 高內存 內存回收 方法思路
linux 跑的apache,apache工作模式有 Prefork、Worker和 Event 三種,分別是基於進程、線程、綜合模式。
本文中使用的apache是 Event 模式,在訪問量上來之後,linux伺服器總共60G的內存佔用持續升高,於是將內存容量擴大,升高至120G。經過一段時間後發現,內存佔用繼續升高,幾乎將120G佔滿,網站訪問速度急速下降,頁面打開時間甚至到達10s。
最先採取措施是重啟linux伺服器以此來釋放內存,但是內存不到半個月幾乎又要被佔滿了,於是在網上搜尋一下方法,以供參考。
第一部: 首先講一個命令:free 來查看下伺服器內存的使用情況
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 2703 1013 1690 0 116 235
-/+ buffers/cache: 660 2043
Swap: 3999 0 3999
先來解釋第一行:
Mem的 Total=used+free used使用內存 free空閑內存
shared 表示被幾個進程共享的內存的。
buffer 緩衝 是用於存放要輸出到disk(塊設備)的數據。
是根據磁碟的讀寫 設計的,把分散的寫操作集中進行,減少磁碟碎片和硬碟的反覆尋道,
從而提高系統性能。
cache 緩存 是存放從disk上讀出的數據。是把讀取過的數據保存起來,重新讀取時若命中(找到需要的數據)就不 要去讀硬碟了,若沒有命中就讀硬碟。其中的數據會根據讀取頻率進行組織,把最頻繁讀取的內容放在 最容易找到的位置,把不再讀的內容不斷往後排,直至從中刪除。
如果cache 的值很大,說明cache住的文件數很多。如果頻繁訪問到的文件都能被cache住,那麼磁 盤的讀IO bi會非常小。
第二行:
這一行表示兩項 -buffers/cache 和 + buffers/cache
-buffers/cache = used -(buffers+cache) 表示使用的內存中不計算buffers和cache,系統使用內存量
+ buffers/cache =free+( buffers+cache) 表示系統空閑內存與buffers、cache的和
第三行:
交換內存 使用量 空限量
第二部:修改drop_cache 文件,手工釋放內存
/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
第三部:drop_caches的詳細文檔如下:
Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
To free pagecache: 清空 頁面 高速緩存
* 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
從man可以看到,這值從2.6.16以後的核心版本才提供,也就是老版的操作系統都是沒有這個的。
原文:https://blog.csdn.net/zonghua521/article/details/78238886
※編寫高質量代碼 改善Python程序的91個建議
※為JMeter用戶和測試者準備的六種Docker鏡像
TAG:程序員小新人學習 |