top 記憶體used過高

2021-09-11 16:24:01 字數 1513 閱讀 3091

linux伺服器執行一段時間後,由於其記憶體管理機制,會將暫時不用的記憶體轉為buff/cache,這樣在程式使用到這一部分資料時,能夠很快的取出,從而提高系統的執行效率,所以這也正是linux記憶體管理中非常出色的一點,所以乍一看記憶體剩餘的非常少,但是在程式真正需要記憶體空間時,linux會將快取讓出給程式使用,這樣達到對記憶體的最充分利用,所以真正剩餘的記憶體是free+buff/cache

但是有些時候大量的快取佔據空間,這時候應用程式回去使用swap交換空間,從而使系統變慢,這時候需要手動去釋放記憶體,釋放記憶體的時候,首先執行命令 sync 將所有正在記憶體中的緩衝區寫到磁碟中,其中包括已經修改的檔案inode、已延遲的塊i/o以及讀寫對映檔案,從而確保檔案系統的完整性

說到清理記憶體,那麼不得不提到/proc這乙個虛擬檔案系統,這裡面的資料和檔案都是記憶體中的實時資料,很多引數的獲取都可以從下面相應的檔案中得到,比如檢視某一程序占用的記憶體大小和各項引數,cpu和主機板的詳細資訊,顯示卡的引數等等;相應的關於記憶體的管理方式是在/proc/sys/vm/drop_chches檔案中,一定要注意這個檔案中存放的並不是具體的記憶體內容,而是0-3這幾個數字,通過檔案大小只有1b也可以知道,而這些代號分別告訴系統代表不同的含義如下:

0:0是系統預設值,預設情況下表示不釋放記憶體,由作業系統自動管理

1:釋放頁快取

2:釋放dentries和inodes

3:釋放所有快取

所以根據上面的說明,分別將1,2,3這3個數字重定向到drop_caches中可以實現記憶體的釋放,一般釋放記憶體都是重定向3到檔案中,釋放所有的快取

那麼下面舉個例子,比如這裡只釋放頁快取,首先使用 free -h 檢視當前記憶體剩餘

當前記憶體剩餘570m左右,另外buff/cache是1.3g,根據上面說的現在真正的剩餘記憶體應該是1.8g左右,首先寫快取到檔案系統:

sync

然後執行下面命令釋放記憶體(頁快取buff/cache):

echo 1 > /proc/sys/vm/drop_caches

執行完之後,再次檢視記憶體剩餘:

會發現記憶體被釋放了,可用記憶體確實變為1.8g左右

到這裡記憶體就釋放完了,現在drop_caches中的值為1,如果現在想讓作業系統重新分配記憶體,那麼設定drop_caches的值為0即可:

echo 0 > /proc/sys/vm/drop_caches

另外需要注意的是,在生產環境中的伺服器我們不要頻繁的去釋放記憶體,只在必要時候清理記憶體即可,更重要的是我們應該從應用程式層面去優化記憶體的利用和釋放,經常清理記憶體可能只是暫時遮蔽的應用程式中的一些bug,所以更重要的是程式的調優,其他的交給作業系統來管理

解決svchost占用記憶體過高問題

摘抄自 滑鼠右鍵單擊此電腦,選擇管理進入,如下圖所示 進入管理介面,雙擊右側的服務與程式,如下圖所示 在服務與程式介面雙擊服務進入,如下圖所示 在服務列表找到windows update服務,如下圖所示 雙擊windows update服務進入,將啟動型別設定為手動,然後點選應用按鈕,如下圖所示 接...

程序CPU 記憶體過高問題查詢

1 定位程序 找出占用cpu最高的10個程序 ps aux sort k3nr head n 10 檢視占用記憶體最高的10個程序 ps aux sort k4nr head n 10 或者使用 top 按 1 顯示cpu列表,再按 shift p 以cpu排序 2 程序跟蹤分析 檢視程序開啟的檔案...

mysql5 7記憶體占用持續過高

table open cache指定表快取記憶體的大小。每當mysql訪問乙個表時,如果在表緩衝區中還有空間,該錶就被開啟並放入其中,這樣可以更快地訪問表內容。通過檢查峰值時間的狀態值open tables和opened tables,可以決定是否需要增加table open cache的值。如果你...