1. 程式人生 > >正確理解Linux記憶體佔用過高的問題

正確理解Linux記憶體佔用過高的問題

最近有個月經問題,老有人問為何開機後,還沒有其他服務,mem就被用完了?是不是記憶體洩露?是否要重啟服務?只能說不要看現象,要看本質才能找到問題的根源。
往往給出這樣的結果,懷疑記憶體用了90%:
Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers
Swap: 2650684k total, 80k used, 2650604k free, 3006404k cached

這樣懷疑很普遍,因為很多人用慣了Windows。Windows下,可以使用工作管理員檢視當前程序對於記憶體的消耗情況。在我看來,Windows實體記憶體總是留下一定的空間,就算此時實體記憶體有空閒時,也會讓某些程式去使用虛擬記憶體,目的是在Windows下啟動新程式時,直接分配空閒的實體記憶體,這樣子新程式啟動速度就較快,而Linux則不然。


而在Linux下,使用top命令看到記憶體佔用情況:

Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers
Swap: 2650684k total, 80k used, 2650604k free, 3006404k cached


這裡的結果顯示使用了3.8G的used,佔用率達到90%。看看free的結果你還可以對比一下:
$ free -m
total used free shared buffers cached
Mem: 4049 3784 265 0 208 2939
-/+ buffers/cache: 636 3413
Swap: 2588 0 2588


雖然MEM顯示了3.7G左右的used,但是(-/+ buffers/cache)減去buffers和cache的結果可以看到,當前程序實際佔用記憶體是636M,而可用空閒(free)記憶體為3.4G。


可以這麼理解:在linux的記憶體分配機制中,優先使用實體記憶體,當實體記憶體還有空閒時(還夠用),不會釋放其佔用記憶體,就算佔用記憶體的程式已經被關閉了,該程式所佔用的記憶體用來做快取使用,對於開啟過的程式、或是讀取剛存取過得資料會比較快。

如上面的例子:使用了4G的記憶體,3.7G被佔用,但是buuffer和cached部分作為快取,可以使用命中率的方式提高使用效率,而且這部分快取是根據指令隨時可以釋放的,我們可以認為這部分記憶體沒有實際被使用,也可以認為它是空閒的。


因此檢視目前程序正在實際被使用的記憶體,是used-(buffers+cache),也可以認為如果swap沒有大量使用,mem還是夠用的,只有mem被當前程序實際佔用完(沒有了buffers和cache),才會使用到swap的。

相關推薦

正確理解Linux記憶體佔用的問題

最近有個月經問題,老有人問為何開機後,還沒有其他服務,mem就被用完了?是不是記憶體洩露?是否要重啟服務?只能說不要看現象,要看本質才能找到問題的根源。往往給出這樣的結果,懷疑記憶體用了90%:Mem: 4146788k total, 3825536k used, 3212

解決Linux buffer/cache記憶體佔用的辦法

-------原文地址 https://www.cnblogs.com/rocky-AGE-24/p/7629500.html --------本文只是搬運 在Linux系統中,我們經常用free命令來檢視系統記憶體的使用狀態。在一個RHEL6的系統上,fr

Linux中buff/cache記憶體佔用解決辦法

如何回收cache? Linux核心會在記憶體將要耗盡的時候,觸發記憶體回收的工作,以便釋放出記憶體給急需記憶體的程序使用。一般情況下,這個操作中主要的記憶體釋放都來自於對buffer/cache的釋放。尤其是被使用更多的cache空間。既然它主要用來做快

Linux中Cache記憶體佔用解決辦法

在Linux系統中,我們經常用free命令來檢視系統記憶體的使用狀態。在一個RHEL6的系統上,free命令的顯示內容大概是這樣一個狀態: 這裡的預設顯示單位是kb,我的伺服器是128G記憶體,所以數字顯得比較大。這個命令幾乎是每一個使用過Linux的人必會的命令,但越是這樣的命令,似乎真正明白的人越少(

Sublime Text 3 CPU佔用率 && WebStorm記憶體佔用

  用Sublime Text 3或WebStorm進行前端開發時,遇到了同樣的問題:當專案檔案比較多或檔案比較大時,CPU佔用率或記憶體佔用持續比較高,後來經查閱發現是index files導致的,可以理解為:Sublime Text 3或WebStorm需要不斷重新整理檔案索引,不斷將專案檔案從硬碟中讀到

記憶體佔用,快取不釋放導致宕機處理方案

故障現象: 1、某分行部署的某臺伺服器記憶體佔用過高,導致宕機; 2、程式碼層面檢查暫未發現問題,伺服器硬重啟持續一段時間後(3-5天)再次佔滿。 發現問題: 趕往現場後進行檢查,當時是一切正常的,今有DB2程序佔用18%,在正常範圍內; 在crontab 中發現有兩個指

Spring cloud開發記憶體佔用解決方法

https://blog.csdn.net/wanhuiguizong/article/details/79289986   版權宣告:本文為博主原創文章,轉載請宣告文章來源和原文連結。 https://blog.csdn.net/wanhuiguizong/article/details/79

MySQL 5.6記憶體佔用解決方案【總結】

最近把MySQL升級到了5.6版本,無意中在工作管理員發現MySQL記憶體佔用達到400+M,這是怎麼回事呢?以前的版本可沒有遇到過這種情況啊。開始的時候還以為是快取了某個資料量較大的表的資料。於是重啟MySQL服務,但結果出乎意料,MySQL服務一起啟動,記憶體就又飆

Redis過期--淘汰機制的解析和記憶體佔用的解決方案

echo編輯整理,歡迎轉載,轉載請宣告文章來源。歡迎新增echo微信(微訊號:t2421499075)交流學習。 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!!! Redis在我們平時的開發或者練習的時候,往往很容易忽略一個問題,那就是我們的Redis記憶體佔滿的問題。但是在

Docker長期執行導致Linux記憶體buff/caches佔用的解決方法

Docker長期執行導致Linux記憶體buff/caches佔用過高,這個問題很常見,但是我們是無法控制Docker自己對pag

linux檢視java程序cpu佔用

 linux下查詢java程序佔用CPU過高原因1. 查詢程序top檢視程序佔用資源情況明顯看出java的兩個程序22714,12406佔用過高cpu. 2.查詢執行緒使用top -H -p <pid>檢視執行緒佔用情況 3.查詢java的堆疊資訊將執行緒id轉換成十

linux主機cpu 佔用分析

1.用top命令檢視哪個程序佔用CPU高 gateway閘道器程序14094佔用CPU高達891%,這個數值是程序內各個執行緒佔用CPU的累加值。 PID USER PR NI VIRT RES SHR S %CPU %MEM T

效能優化-CPU佔用問題排查

1. 效能優化是什麼? 1.1 效能優化就是發揮機器本來的效能 1.2 效能瓶頸在哪裡,木桶效應。   CPU佔用過高 1、現象重現 CPU佔用過高一般情況是程式碼中出現了迴圈呼叫,最容易出現的情況有幾種: a)遞迴呼叫,退出機制設計的不夠

JAVA Linux 排查CPU 的方法

原文:https://blog.csdn.net/zhanglh046/article/details/50443528  方法一 1 ps -ef | grep java 查詢java 程序號 2 top -p PID -H 觀察佔用CPU較多的執行緒 3 找出CPU消耗較多的執行緒

MYSQL "ORDER BY rand()"的坑--容易導致機器負載、CPU佔用

在一次微信砍價活動營銷中,使用了4核16G10M頻寬的伺服器支撐業務,本來這個配置跑個PHP+MYSQL+nginx肯定輕輕鬆的事情,可是隨著活動的高潮,併發數一高,機器負載核CPU一下子就達到100% 始終找不到原因,只知道是mysql分配的記憶體不夠,一直給它加,但是重啟m

cpu佔用排查

top命令是Linux下常用的效能分析工具,能夠實時顯示系統中各個程序的資源佔用狀況,類似於Windows的工作管理員 內容解釋: PID:程序的ID USER:程序所有者 PR:程序的優先級別,越小越優先被執行 NInice:值 VIRT:程序佔用的虛擬記憶體 RES:程序佔用的實體記憶體 SHR:程

java執行CPU佔用追蹤

流程執行命令: 1.top  查到pid 28555 2.ps aux|grep 28555 確定到是tomcat的程序 3.顯示執行緒列表 ps -mp 28555 -o THREAD,tid,time   查到tid 28802 4. printf "%x\n" 2880

Win10 服務主機:本地系統 CPU佔用

這種情況,一般開機後,本地系統的CPU佔用就一直維持在30%左右,風扇一直轉很耗電。 可能是windows版本的問題,我在不同的機子上裝了四五個系統,都出現了這種情況。 解決方法如下: 1. 找到工作管理員中的“ 服務主機:本地系統”->“Windows Upda

linux 記憶體佔用情況檢視並優化

1. 使用top 檢視記憶體的佔用情況,該命令類似於windows系統的記憶體管理器, 然後鍵入"M"命令根據記憶體的佔用情況降序排列,看看記憶體主要由哪些程序佔用。("P"是CPU佔用情況降序排列) 2.再使用free -m卻還有6.1G被佔用(記憶體總共8G),仔細

一次JVM_OLD區佔用、頻繁Full GC的解決過程

最近,公司網站頻繁報警,JVM_OLD佔用過高,線上訪問超時嚴重,針對這個問題著實頭疼了一把,不過最終還是解決了,下面說下解決的過程。 1,首先 登到線上機器上去,top命令,檢視當前機器的負載,檢視當前哪個程序在消耗資源。 Shell 1