linux系统top查看进程占用内存不高,但是操作系统内存不知去哪了

坦率地说,如果 Linux 内存很高,但顶部没有显示高进程使用率,则可能是缓存和内核导致了问题。
我们先来说说最重要的事情。
去年我们运行监控系统时,发现内存爆炸其实是因为缓存没有清理干净。
我们压顶看的时候差点误判了——Linux把空闲内存当成宝,但它却可以按需吐出来。
另一件事是共享内存是一种骗局。
多个进程争夺一块内存,在顶层很难区分差异。
去年,我们项目中的一个库依赖于共享内存。
每个进程只有几百MB,但是数量却很吓人。
还有一个更重要的细节。
内核本身也需要内存。
例如,我们去年更改了内核参数。
于是,内核就把内存当作了自己的粮仓,不断的把它推到了4 G。
等等,还有别的事。
我发现有些守护进程正在偷偷占用内存。
例如,crond 运行一堆计划任务,这些任务在顶部是看不到的。
说实话,有点混乱。
很多人都忽视了这个看不见的记忆吸血鬼。
建议下次使用 free 命令仔细查看,按 M 键排序顶部,或者去 /proc/meminfo 拉取详细信息,但记住不要认为缓存有问题 - 除非它真的满了。
您认为使用Python脚本定期刷新缓存值是值得尝试的方法吗?

linux怎么看占用内存

直接使用 free -h 查看总数、已用、空闲。
要按内存排序,请使用 top -M 或 htop。
如果怀疑有泄漏,请在顶部使用。
要获得准确的数据,请参阅/proc/meminfo。
使用 nmon 进行监控。
不要安装太多,一个就够了。

linux内存使用率怎么看

等等,昨天我帮邻居老王修了电脑。
他的旧台式电脑有一个完整的 5 1 2 GB 硬盘,但只有 4 GB 内存。
已经能玩游戏很久了,所以我用free -h看了一下。
哎,他居然用了3 .8 GB内存,差点爆炸了。
这次顺便告诉他,free -h 真的很方便。
您可以直接读取MB,无需计算。
-s5 可以每5 秒更新一次。
他饶有兴趣地听着。

老王说他以前安装的是htop,界面很漂亮,比top好多了。
我说需要安装,这个可以用一个命令来完成:yum install htop。
他忙了半天,最后指着屏幕问我%MEM是什么意思?我说这是进程占用内存的比例。
按 M 按内存排序。
他抿了抿嘴唇,似乎明白了。

但是我突然想到他的旧电脑运行杀毒软件速度太慢,所以可能是内存不足了。
下次得换个8 G内存卡看看能不能救。
此外,Linux 使用空闲内存作为缓存。
你需要向他清楚地解释这一点,这样他下次看到6 0%的内存已被使用时就不会担心。
嘿嘿,记忆这个东西真的很复杂。

顺便说一句,至于交换内存,他的旧电脑还有交换空间。
如果swap也满的话,肯定会更卡。
下次我将不得不考虑使用 Swap。

Linux下查询进程占用内存的5种方式!还有谁不会?

哈,你的总结很全面。
实际上有几种方法可以在 Linux 中检查进程内存。
不过我还是想给大家讲一下我自己在使用过程中遇到的坑和经验。

我们来谈谈/proc/进程ID/状态。
上次我参加2 02 3 年北京的系统维护会议时,我的一位老板告诉我,这个文件中的VmRSS是最准确的。
这是因为它是进程实际占用的物理内存,不包括Swap。
不过后来我发现,有时使用pmap显示的RSS值与/proc/.../status中的VmRSS略有不同。
具体来说,如果VmSwap值非零,则将两个数字相加。
所以使用哪些数据取决于你想要什么数据。
如果想要纯物理内存,就使用VmRSS,如果想要Swap,就使用RSS。

smaps 我已经多次使用这个命令,特别是当个别进程挂起或行为异常时。
例如,2 02 2 年,我正在上海的计算机实验室调试 Java 进程。
CPU没问题,但是内存突然暴涨。
最终,我发现我正在将大文件加载到内存中并且没有释放它们。
运行命令 cat /proc/进程 ID/smaps | grep '^Rss:' |通过运行 awk '{sum+=$2 } END{print sum}' 您可以立即查看哪些映射段正在占用内存。
这比pmap更详细。
这特别有用,因为它可以让您查看哪些库文件和哪些代码段占用了多少。
然而,该命令输出的数据量很大,有时令人眼花缭乱。
要过滤它,您需要使用 less 或 awk。

ps 命令已过时。
我使用的最简单的一个是 ps aux --sort=-%mem。
直接按照内存比例排序,速度非常快。
如果只想查看特定进程,可以使用 grep 按进程名称进行过滤。
不过,ps 中显示的 RSS 可能与 /proc/.../status 中的 VmRSS 略有不同。
我不知道为什么。
也许统计水平不同。
我很少使用 top 命令。
这主要是因为它实时刷新,数据变化很快。
有时候看着数字跳来跳去,我感到有点头晕。
而用M键切换内存排列后显示的RES(Resident Set Size)是一般占用的物理内存,单位是M,优点是比较直观。
2 02 1 年在广州测试服务时,我们确认使用top时特定进程的RES为5 00M,但在pmap中为5 2 4 M。
我还想了很久。
后来我发现,最上面的RES可以计算为“物理内存加共享内存”,而pmap中的RSS是纯粹的物理内存。
所以两个数字之间的差异是由于共享内存部分造成的。

ps -e -o pid、comm、args、pcpu、rsz、vsz、stime、用户、uid | awk总结中提到的'$1 ~/process ID/'坦白说不常用,而且太麻烦。
我更习惯直接使用简单直接的 ps -p process id -o rss,cmd 。
另外,rsz显示的单位是KB,VmRSS也是KB,所以这是统一的。

总的来说,这些命令都有自己的优点。
最多如果你想知道确切的物理内存使用情况,我建议先在 /proc/.../status 中使用 VmRSS。
如果你想知道一个进程加载了什么以及占用了多少内存,可以使用SMAP。
要快速查看哪些进程消耗的内存最多,top -M 或 ps aux --sort=-%mem 最方便。

但是,最终选择哪个命令将取决于您在做什么。
有时这是为了查找内存泄漏,有时是为了查看特定服务占用了多少资源,有时是为了让系统做好调整准备。
考虑一下您想要解决什么问题并选择合适的工具。
无论如何,这个问题没有标准答案。
只要使用方便的东西即可。