普通视图

发现新文章,点击刷新页面。
昨天以前首页

探索 Linux 内存占用找出最吃内存的进程

2025年2月23日 00:00

无论是服务器还是个人电脑,了解哪些进程占用了最多的内存,对于系统管理员和普通用户来说至关重要。不仅可以帮助我们优化系统性能,还能避免因内存不足而导致系统崩溃。本文将介绍如何在 Linux 系统中统计内存占用最多的前 10 个进程。

为什么要统计内存占用

多任务操作系统中,内存是有限的资源。

当多个进程同时运行时,它们会争夺有限的内存空间。

如果某些进程占用内存过多,可能导致系统响应变慢,甚至出现内存不足错误。

因此,定期检查内存占用情况,找出占用最多进程,可以帮助我们更好管理资源,优化系统性能。

使用命令工具统计内存占用

使用 pssort 的命令组合:

1
ps -eo pid,comm,%mem --sort=-%mem | head -n 11

解释:

参数作用
ps -eo pid,comm,%mem列出所有进程的 PID、进程名称和内存占用百分比。
–sort=-%mem按内存占用百分比降序排序。
head -n 11显示前 11 行的内容「第一行是标题,接下来是前 10 个进程的信息」

虽然 top 命令主要用于实时的监控系统资源,但也可通过以下方式快速查看内存占用最多的进程:

1
top -o %MEM -b -n 1 | head -n 18

解释:

参数作用
-o %MEM按照内存占用排序。
-b以批处理模式运行,输出到终端上。
-n 1只需运行一次。
head -n 18过滤出前 18 行「因为 top 输出的前几行是系统信息,实际进程从第 8 行开始」

如果需要更详细的内存占用信息,可结合 pmap 命令:

1
ps -eo pid,%mem,comm --sort=-%mem | head -n 11 | awk '{print $1}' | xargs -I {} pmap {} | grep total

解释:

参数作用
ps -eo pid,%mem,comm –sort=-%mem获取内存占用最高的进程 PID。
awk ‘{print $1}’提取 PID 进程号。
xargs -I {} pmap {}获取每个进程详细内存映射信息。
grep total过滤 total 行,显示每个进程的总内存占用情况。

如果系统安装了 smem 工具,可以更直观地查看内存占用:

1
smem -s rss -c "pid user command rss" --sort=rss | head -n 11

解释:

参数作用
-s rss按 RSS 排序。
-c “pid user command rss”指定显示的列。
–sort=rss按 RSS 排序。
head -n 11显示前 11 行的内容。

如何分析内存占用情况

确认进程是否必要。有些进程可能是系统正常运行所必需,例如 systemd 等。这些进程通常不会占用过多内存。然而,如果某些进程是用户启动的,如某个应用程序或脚本,需确认它们是否在正常运行。

检查进程是否内存泄漏。如某个进程的内存占用持续增加,可能是内存泄漏导致的。内存泄漏是指程序在申请内存后,无法正确释放已分配的内存,导致内存占用不断增加。这种情况下需要检查程序的代码,查找可能导致内存泄漏地方。

限制进程内存使用。如果某个进程占用过多内存,但又不能轻易终止,可以尝试限制它的内存使用。

Linux 提供 ulimit 命令,可设置进程的资源限制。例如,限制某个进程的最大内存使用量为 1GB,可使用命令 ulimit -m 1048576

内存管理其它技巧

除了统计内存占用最多进程,还可通过以下方式优化 Linux 系统的内存管理。

调整交换空间。交换空间是磁盘上的一部分空间,当物理内存不足时,系统会将一些不常用的内存页面移到交换空间。虽然使用交换空间可以避免系统崩溃,但磁盘速度远慢于内存,因此过多地使用交换空间会导致系统性能下降。

可以通过命令 swapon --show 查看交换空间的使用情况。如果交换空间使用过多,可以考虑增加物理内存,或者调整交换空间大小。

使用内存清理工具。Linux 系统会自动管理内存分配、回收,但有时也可以手动清理内存。

例如,可以使用 sync 命令将缓存数据写入磁盘,然后用 echo 3 > /proc/sys/vm/drop_caches 命令清理缓存。

但请注意,这种方法可能会对系统性能产生一定影响,因此需要谨慎使用。

鸟枪换炮

2024年11月15日 23:43

双十一前,我就说过今年要换手机和电脑。所以无疑现在电脑已经到了。我不知道现在这个价格算不算贵,不过比较了一下,按配件单买的话,只有更贵。

鸟枪:老主机退居二线

刚退居二线的那台组装机是15年4月29日在合肥百脑汇组装的。当年记录的文章还在,当时的单子也还在。只是有些模糊了。

2024 11 15_214715_457 scaled.jpg
前台式机的配置单

至强E3 1231 v3处理器,微星Z97,金士顿骇客8G ddr3内存,威刚128G SSD,七彩虹GTX750显卡,垃圾24寸显示器,鑫谷电源,(看不清楚了),一体水冷散热器,最后价格5330。现在想想9年前这个价格,跟现在相比,也是不菲的费用。

当然,老主机并没有退役,只是退居二线。我打算用它来做家庭服务器,NAS之类的,虽然功耗相对小主机大了些,但是硬盘可扩展性比较强。

换炮:i5十四代+DDR5内存

2024 11 15_221155_259.jpg
2024 11 15_221147_860.jpg

京东上有一家店推出的配置,本来选了配置二5499好像,后来选了标准版3199。二者在主板、内存、散热和显卡的区别,可以将价格压的这么低,也是让我很惊讶的。当我下单标准版之后,优惠价格看不到了。但是我找了一圈,4060TI这个显卡的价格都在2700-3200的价格,所以我只能退而求其次,选其他显卡了。

2024 11 15_222619_315 scaled.jpg
顺丰暴力运输,拐角碰撞
2024 11 15_222609_982 scaled.jpg
顺丰暴力运输,外箱破损
2024 11 15_222452_687 scaled.jpg
内箱包装
2024 11 15_222505_495 scaled.jpg
机箱顶部磁吸防尘网
2024 11 15_222511_531 scaled.jpg
机箱外观
2024 11 15_222517_444 scaled.jpg
机箱内部
2024 11 15_222527_219 scaled.jpg
机箱接口
2024 11 15_222534_405 scaled.jpg
机箱外观
2024 11 15_222540_745 scaled.jpg
看这水冷散热,好大
2024 11 15_222549_490 scaled.jpg
主板包装盒
2024 11 15_231352_975 scaled.jpg
2024 11 15_231412_093 scaled.jpg

看到外包装箱破损的时候,心里还是有些慌的,我问了商家客服,客服跟我说录个开箱视频,如果内件破损的话,可以拒收。这才放心收下了。好在里面还套了个箱子,是机箱外包装,并且完好无损,这才一颗悬着的心放下了。这机箱给我的感觉就是太大,二次元的涂鸦,感觉有些花里胡哨了。不过质感还是不错的。这个散热器感觉不错哦,特别大,有三个风扇。老主机也才一个呢。最后,看到这个主板包装盒还能给我带回来,就很赞。但没看到CPU的包装盒,应该不是盒装cpu了。

蓝宝石 RX6750 GRE 10G白金版

从价格上,我选择了相对比较便宜的A卡——蓝宝石RX6750 GRE 10G白金版,优惠价1849,还能免息分三期。从GTX750 1G到RX6750 10G,简直是逆天了。当年不玩游戏,配电脑的时候,显卡也是随意配的,因为E3处理器是没有显存的,否则连显卡都可能不配。选择A卡,还有一种情结——黑苹果。因为国服LOL只有win版,所以Mac mini肯定用不了。我就想试试能不能继续黑苹果呢。不过现在Linux的崛起,可能以后苹果系统没那么新鲜了。

2024 11 15_225517_453 scaled.jpg
显卡正面
2024 11 15_225533_706 scaled.jpg
显卡背面
2024 11 15_225542_610 scaled.jpg
显卡外包装
2024 11 15_225550_732 scaled.jpg
显卡原装正品标签
2024 11 15_225559_864 scaled.jpg
安装显卡后的样子
2024 11 15_225606_255 scaled.jpg
系统设备

之前看短视频,说男人的快乐,只要一个显卡就够了。确实如此,当我摸到这个显卡的时候,内心不自觉的开始澎湃起来了。感觉这辈子都没这么开心了。蓝宝石规定,这个原装正货的标签如果被拆封,是不支持7天无理由的。显卡安装也是很简单的。一次点亮。

所以这台新主机的价格是主机3199+显卡1849-主机好评返现66=4982元。近一个月工资了,这简直在放血啊。加上iPhone16,这个月的消费是今年一年中最高的一月,已经达到天花板了。

关于Windows系统版本

电脑默认是Windows 11 家庭版,说是送正版系统,但总给我感觉盗版的样子。当年win10还是win11测试的时候吧,我是那一批最先体验的,后来微软让那批人可以免费授权激活Windows。所以我割掉硬盘,重新安装Windows 11专业版。而Windows官方下载会有单独的Windows专业中文版,我以为是我以为的那个专业版,可安装之后,激活不了,说是与我的数字证书版本不一致。

wechat_2024 11 15_232216_649.png
Windows11系统版本

所以只能选择第一个,多版本ISO,然后安装的时候,选择Windows 11 专业版,再用自己的账号激活系统,这才是免费正版Windows。有点不明白,这俩专业版有啥区别。为了后期安装黑苹果,ESP分区设置大了一些,600M。所以,如果有我这台电脑配置的黑苹果EFI,求分享哦!

版权声明: 本文采用 BY-NC-SA 协议进行授权,如无注明均为原创,转载请注明转自 皇家元林
本文链接: 鸟枪换炮

快速释放内存脚本

2020年1月19日 00:00

我们会在系统中安装内存监测工具来查看内存占用情况,它是服务器的运行效率的一个重要的参考指标,如果内存占用过大时如何快速的释放内存,今天我们来聊一下!

内存占用

之前的教程中,我们提到过 Linux 系统内存运行机制,在这里简单复习下。

Linux 内存的占用分为真实占用、缓存占用、缓冲占用,其中后两者是为了提升系统运行效率,可以关闭或者情况,以达到释放内存的目的。

释放脚本

1
2
3
4
5
6
7
8
#!/bin/bash
echo "Release Before:"
free -h
sync
sleep 10
echo 3 > /proc/sys/vm/drop_caches
echo "Release After:"
free -h

注意:我们的脚本就是基于这个原理实现的,但因为 Linux 把文件放在内存中执行,如果直接释放,必然会导致数据的丢失,所以我们在释放前,还需要做一个同步操作。

脚本讲解

sync 命令是将 buff/cache 中的数据写入到硬盘中,以达到同步数据的目的,这样可以防止数据丢失。

sleep 命令是执行上一条命令后,等待一定秒数后继续实行下面的命令,使数据可以充分的同步,大家可以调整时间保证数据的完整性,注意时间不要太短!

运行效果

运行效果如下:

简单聊 Linux 内存管理机制

2020年1月16日 00:00

经常遇到一些刚接触 Linux 的新手会问内存占用怎么那么多?我也没运行什么啊?一看就是被 Windows 的内存气泡吓到了,生怕 Linux 系统会卡顿甚至宕机。但是大家有没有发现就算内存占用了很多,Linux 依旧不卡顿,今天杜老师就聊一下 Linux 内存管理机制!

内存管理

在 Linux 中经常会发现空闲内存很少,似乎所有的内存都被系统占用了,表面的感觉是内存不够用了。其实不然,这是 Linux 内存管理的一个优秀特性,在这方面,区别于 Windows 内存管理。

主要的特点是,无论物理的内存有多大,Linux 都将其充分利用,将一些程序调用过的硬盘数据读入内存中,利用内存读写的高速特性来提高 Linux 系统的数据访问性能。

而 Windows 是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量内存空间。

换句话说,增加一些物理内存,Linux 都将能充分利用起来,发挥了硬件投资带来的好处,而 Windows 将其做为摆设,即使增加更大。

缓冲缓存

Linux 的这一特性,主要是利用空闲的物理内存,划分出一部份空间,做为 buff/cache 来使用,以此提高数据访问性能。

页高速缓存 cache 是 Linux 内核中实现的一种主要磁盘缓存。它主要用来减少对磁盘的 I/O 操作。

具体地讲,是通过把磁盘中的数据缓存到物理内存中,把磁盘的访问变为对物理内存的访问。

磁盘高速缓存价值在于两个方面:

  1. 访问磁盘的速度要远远低于访问内存速度,因此,从内存访问数据比磁盘访问速度更快;
  2. 数据一旦被访问就很有可能在短期内再次被访问到。

管理机制

我们知道,直接从物理内存读写数据要比从硬盘中读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存的容量是有限的,这样就引出了物理内存与虚拟内存的概念。

物理内存是系统硬件提供的内存大小,是真正的内存,而相对于物理内存,在 Linux 下还有一个虚拟内存的概念,虚拟内存是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间。

作为物理内存扩展,Linux 会在物理内存不足时,会使用交换分区的虚拟内存,详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样一来,物理内存就得到了释放,这块内存就可以用于其它目的了,当需要用到原始内容时,这些信息会被重新从交换空间读入到物理内存。

Linux 的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。

概念扩展

Linux 系统会时不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使没有什么事情需要内存,也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间。

Linux 进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,Linux 内核根据最近最经常使用算法,仅仅将一些不经常使用的页面文件交换到虚拟内存,有时我们会看到这么个现象:Linux 的物理内存还有很多,但是交换空间也使用了很多。

其实,这不奇怪,例如,一个占用很大内存的进程运行时,需要耗费很多内存资源,此时就会有一些不常用的页面文件被交换到虚拟内存中,后来这个占用很多内存资源的进程结束并释放了很多内存时,刚才被交换出去的页面文件不会自动的交换进物理内存,除非是有这个必要,那么此刻系统物理内存就会空闲很多,同时交换空间也被使用,就出现了刚才所说的现象了。关于这点,不用担心什么,只要知道是怎么一回事就可以了。

交换空间的页面在使用时会首先被交换到物理内存,如果此时没有足够的物理内存来容纳这些页面,它们会被马上交换出去,如此以来,虚拟内存中可能没有足够空间来存储这些交换页面,最终导致 Linux 出现假死机、服务异常问题,虽然可以在一段时间内自行恢复,但是恢复后的系统已经基本不可用了。因此,合理规划和设计 Linux 内存使用,是非常重要的。

❌
❌