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工具查看:

示例:

相关文章
|
20天前
|
存储 Linux 调度
深入理解操作系统:从进程管理到内存分配
【8月更文挑战第44天】本文将带你深入操作系统的核心,探索其背后的原理和机制。我们将从进程管理开始,理解如何创建、调度和管理进程。然后,我们将探讨内存分配,了解操作系统如何管理计算机的内存资源。最后,我们将通过一些代码示例,展示这些概念是如何在实际操作系统中实现的。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
|
18天前
|
监控 Ubuntu API
Python脚本监控Ubuntu系统进程内存的实现方式
通过这种方法,我们可以很容易地监控Ubuntu系统中进程的内存使用情况,对于性能分析和资源管理具有很大的帮助。这只是 `psutil`库功能的冰山一角,`psutil`还能够提供更多关于系统和进程的详细信息,强烈推荐进一步探索这个强大的库。
29 1
|
1月前
|
缓存 Linux C语言
C语言 多进程编程(六)共享内存
本文介绍了Linux系统下的多进程通信机制——共享内存的使用方法。首先详细讲解了如何通过`shmget()`函数创建共享内存,并提供了示例代码。接着介绍了如何利用`shmctl()`函数删除共享内存。随后,文章解释了共享内存映射的概念及其实现方法,包括使用`shmat()`函数进行映射以及使用`shmdt()`函数解除映射,并给出了相应的示例代码。最后,展示了如何在共享内存中读写数据的具体操作流程。
|
1月前
|
Linux Windows
检测进程内存的活跃程度
检测进程内存的活跃程度
|
2月前
|
监控 Linux
性能分析之 Linux 系统中 ps&top 中 CPU 百分比不一致?
【8月更文挑战第18天】性能分析之 Linux 系统中 ps&top 中 CPU 百分比不一致?
43 4
|
2月前
|
存储 Linux Windows
在Linux中,如何查看linux中内存使用率最高的进程?
在Linux中,如何查看linux中内存使用率最高的进程?
|
1月前
|
Linux
查看进程的内存使用信息
查看进程的内存使用信息
|
2月前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存分配
【8月更文挑战第31天】在数字世界的每一次点击和滑动背后,都隐藏着一个复杂而精妙的世界——操作系统。它如同一座无形的桥梁,连接着人类与机器的沟通。本文将带你一探究竟,从进程的生命周期到内存的精细管理,我们将一起解码操作系统的核心机制。通过直观的代码示例,你将看到理论与实践的结合如何让冷冰冰的机器生动起来。准备好了吗?让我们开始这段探索之旅,揭开操作系统神秘的面纱。
|
2月前
|
存储 算法 调度
深入理解操作系统:从进程管理到内存优化
【8月更文挑战第29天】在数字世界的心脏跳动着的,是无数行代码构成的操作系统。本文将带领读者穿梭于操作系统的两大核心领域——进程管理和内存优化,揭示它们如何协同工作以确保计算机系统的高效运行。通过实际代码示例,我们将探索进程的生命周期、调度策略以及内存分配和回收机制。加入我们,一起解锁操作系统的秘密,理解其背后的逻辑与哲学。
|
2月前
|
Linux
在Linux中,如何找出占用CPU或内存最多的进程?
在Linux中,如何找出占用CPU或内存最多的进程?
下一篇
无影云桌面