Linux系统内存使用率与top进程展示使用率不一致问题

简介: 使用top/htop工具查看的内存占用率与free/云监控不一致问题

问题现象如下:

情况1:free -m查看内存使用了1.1G,但是空闲free只有88m

情况2:used直接使用了90%+,其余没有看出占用

top查看进程,只有java占用了不到50%,折算下来空闲内存应该至少还有600M左右,但是实际可用已经没有了。

原因:

简单理解内存分为物理内存和虚拟内存(swap),这里不考虑swap问题。

物理内存又被系统划分为了Buffers、Cached、Active、Inactive,这4大块,其中buffer是给文件的缓冲大小,cache是做内存缓存的,active是活跃内存,inactive是非活跃内存。

其中active又包含了Active(file)、Active(anon)、pagecahce等等,这里不做详细解释,可自行搜索【meminfo详解】

其实平时我们查看具体的内存占用普遍使用free -h去查看,但是要查具体哪个进程占用了内存会考虑使用top,这就产生了问题。

首先,free -h会显示内存总量、使用量、剩余量、cache占用量不包含在已使用量之中,会引起客户误判,不去考虑这个buffer/cache的占用。

其次,top看进程内存占用,也不会去考虑哪个进程使用了多少cache。

所以这就造成了使用率不一致的情况。标准解决,使用命令查看物理内存占用详情。

以MB为单位显示:

cat /proc/meminfo | awk '{print $1,$2/1024" MB"}'|column -t

以GB为单位显示:

cat /proc/meminfo | awk '{print $1,$2/(1024*1024)" GB"}'|column -t

显示的明明白白,清清楚楚。

然后具体情况具体分析,看是哪一块占用了,根据meminfo详解去对照解释。

关于cache、pagecache等的释放命令:

1、sync (将未落盘的内存脏数据同步到磁盘,防止内存数据丢失)

2、

# echo 1 > /proc/sys/vm/drop_caches;

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

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

对于1、2、3的解释:

echo 1是释放页缓存,echo 2 是释放slab,而echo 3就是既释放页缓存,又释放slab


查看Buffer&Cache被哪些进程占用

使用hcache工具查看:

示例:

相关文章
|
7天前
|
存储 Linux 调度
深入理解操作系统:从进程管理到内存分配
【8月更文挑战第44天】本文将带你深入操作系统的核心,探索其背后的原理和机制。我们将从进程管理开始,理解如何创建、调度和管理进程。然后,我们将探讨内存分配,了解操作系统如何管理计算机的内存资源。最后,我们将通过一些代码示例,展示这些概念是如何在实际操作系统中实现的。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
|
6天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
2天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
4天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
6天前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
17 6
|
10天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
5天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
5天前
|
监控 Ubuntu API
Python脚本监控Ubuntu系统进程内存的实现方式
通过这种方法,我们可以很容易地监控Ubuntu系统中进程的内存使用情况,对于性能分析和资源管理具有很大的帮助。这只是 `psutil`库功能的冰山一角,`psutil`还能够提供更多关于系统和进程的详细信息,强烈推荐进一步探索这个强大的库。
16 1
|
7天前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
29 3
|
8天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。