背景介紹
在工作中處理問題的時候,遇到一個問題,自己根據 top
命令時查看到的 used 和 total 計算出來的內存使用率已經達到 90% 以上了,但是系統自帶的監控軟件計算出來的使用率往往沒有這么高。在網上查詢了一些文章,說應該使用 free
命令,top
命令顯示的結果不太准確,因此決定將自己的學習過程記錄一下。
小知識
Linux 的顯示命令中有 free 和 available 兩種表示空閑的內存,它們之間的區別如下:free 表示這部分內存沒有被用來做任何事情,available 表示這邊部分內存可以被應用程序申請使用。
freee 命令
free
命令的顯示結果實際上是從文件 /proc/meminfo
中讀取的,默認的顯示結果如下圖所示:
Linux 中為了加快系統的運行速度,往往會使用緩存的機制。這里的buffers 和 cached 就是操作系統為了加快運行速度使用到的內存,這部分內存不是某個進程申請的。當需要新啟動一個程序時,而程序申請的內存又比較大時,這兩部分的內存時可以釋放出來給當前這個程序使用的。因此實際系統當前空閑,可供新的程序申請使用的應該是第二行顯示的空閑內存。
top 命令
有了上面free
命令的顯示結果介紹,也就明白了為什么根據 top
命令顯示的 used 和 total 計算出來的內存使用率不准確,因為這里的 used 並沒有除去 buffers 和 cached 使用的這部分內存,而這部分內存實際上是可以釋放出來給程序使用的。
參考
[1] : free(1) - Linux manual page (man7.org)
[2] : linux - Meaning of the buffers/cache line in the output of free - Server Fault
[3] : top(1) - Linux manual page (man7.org)
[4] : Free vs. Available Memory in Linux