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

示例:

相关文章
|
缓存 Linux
linux 手动释放内存
在 Linux 系统中,内存管理通常自动处理,但业务繁忙时缓存占用过多可能导致内存不足,影响性能。此时可在业务闲时手动释放内存。
885 17
|
消息中间件 存储 网络协议
从零开始掌握进程间通信:管道、信号、消息队列、共享内存大揭秘
本文详细介绍了进程间通信(IPC)的六种主要方式:管道、信号、消息队列、共享内存、信号量和套接字。每种方式都有其特点和适用场景,如管道适用于父子进程间的通信,消息队列能传递结构化数据,共享内存提供高速数据交换,信号量用于同步控制,套接字支持跨网络通信。通过对比和分析,帮助读者理解并选择合适的IPC机制,以提高系统性能和可靠性。
2210 14
|
9月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
854 0
Linux内存问题排查命令详解
|
缓存 Linux 数据安全/隐私保护
Linux环境下如何通过手动调用drop_caches命令释放内存
总的来说,记录住“drop_caches” 命令并理解其含义,可以让你在日常使用Linux的过程中更加娴熟和自如。
1938 23
|
监控 Linux Python
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
488 27
|
消息中间件 Linux
Linux中的System V通信标准--共享内存、消息队列以及信号量
希望本文能帮助您更好地理解和应用System V IPC机制,构建高效的Linux应用程序。
578 48
|
Linux 数据库 Perl
【YashanDB 知识库】如何避免 yasdb 进程被 Linux OOM Killer 杀掉
本文来自YashanDB官网,探讨Linux系统中OOM Killer对数据库服务器的影响及解决方法。当内存接近耗尽时,OOM Killer会杀死占用最多内存的进程,这可能导致数据库主进程被误杀。为避免此问题,可采取两种方法:一是在OS层面关闭OOM Killer,通过修改`/etc/sysctl.conf`文件并重启生效;二是豁免数据库进程,由数据库实例用户借助`sudo`权限调整`oom_score_adj`值。这些措施有助于保护数据库进程免受系统内存管理机制的影响。
|
Linux Shell
Linux 进程前台后台切换与作业控制
进程前台/后台切换及作业控制简介: 在 Shell 中,启动的程序默认为前台进程,会占用终端直到执行完毕。例如,执行 `./shella.sh` 时,终端会被占用。为避免不便,可将命令放到后台运行,如 `./shella.sh &`,此时终端命令行立即返回,可继续输入其他命令。 常用作业控制命令: - `fg %1`:将后台作业切换到前台。 - `Ctrl + Z`:暂停前台作业并放到后台。 - `bg %1`:让暂停的后台作业继续执行。 - `kill %1`:终止后台作业。 优先级调整:
1503 5
|
缓存 NoSQL Linux
Linux系统内存使用优化技巧
交换空间(Swap)的优化 禁用 Swap sudo swapoff -a 作用:这个命令会禁用系统中所有的 Swap 空间。swapoff 命令用于关闭 Swap 空间,-a 参数表示关闭 /etc/fstab 文件中配置的所有 Swap 空间。 使用场景:在高性能应用场景下,比如数据库服务器或高性能计算服务器,禁用 Swap 可以减少磁盘 I/O,提高系统性能。
580 3
|
缓存 Linux
Linux查看内存命令
1. free free命令是最常用的查看内存使用情况的命令。它显示系统的总内存、已使用内存、空闲内存和交换内存的总量。 free -h • -h 选项:以易读的格式(如GB、MB)显示内存大小。 输出示例: total used free shared buff/cache available Mem: 15Gi 4.7Gi 4.1Gi 288Mi 6.6Gi 9.9Gi Swap: 2.0Gi 0B 2.0Gi • to
3373 2