linux如何查看内存占用进程

top命令是查看进程占用内存最直接的方法,RES栏显示进程实际占用的物理内存。

ps 命令静态监视内存使用情况。
psaux--sort=-%mem 可以按内存使用量降序显示前 1 0 个进程。

free命令监控系统的整体内存使用情况。
Total 显示总内存,used 显示已用内存。

htop工具交互式监控,按F6 键按MEM%排序。

vmstat和pmap用于深入分析内存和进程状态。

smem统计进程的USS/PSS内存,比较准确。

使用top或htop进行快速查看,ps或htop进行精确排序,pmap或smem进行深入分析,free-h与vmstat结合进行系统概览。

推荐使用htop或top,htop必须安装。

Linux内存和CPU使用情况查询命令

你好,你问的是Linux系统性能监控吧?好的,让我引导您完成它。
我经常使用这些命令,尤其是 2 02 3 年我在上海的数据中心维护服务器时,我离不开它们。

上周,一位客户问我为什么他的服务器 CPU 突然飙升到 1 00%,并且他的系统卡住了。
我先用top,一瞬间看到进程PID是1 2 3 4 ,用户是www-data,CPU使用率上升到8 9 %,而且我记不起进程名是什么服务了。
无论如何,这是他建造的。
然后我使用 vmstat 1 每秒检查一次。
我发现那个进程的CPU一直运行在高位,而wa列,也就是等待I/O的值,从来没有归零。
我猜测这是由于磁盘读写速度慢造成的。

后来加上了iostat -x 1 ,发现阻塞设备的读写延迟很高,不是特别严重,但是很慢。
最后我告诉他进程与磁盘交互太频繁,建议他看一下代码,看看是否可以优化,比如批量读写。
听了之后,他去改了代码,好了很多。

所以你看,如何使用这些命令非常重要:
1 top:这是最常用的。
我每天早上起床都会用top检查服务器状态。
例如,第一行的1 分钟平均负载为3 记住,如果它持续大于CPU核心数,则有点忙。
第三行的%wa,前面提到过,要特别注意,如果数字超过1 5 %,说明I/O确实很慢。
进程列表按CPU排序,以查看哪个进程使用CPU最多。
记下 PID,以便稍后查看。

2 free -m:这个很简单,就看内存是否足够。
比如你的物理内存是8 G,free -m 显示只有1 G是空闲的,而Swap已经使用了2 G,也就是说内存基本是空的。
我当时有一个老客户,服务器只有1 G内存。
当他打开一个新应用程序时,它立即爆炸了。
我建议他增加内存或者使用Swap,他最终选择了增加内存。

3 vmstat 1 :这个可以看到一般状态。
例如,在r列中,如果数字大于CPU核心数的一半,则意味着CPU正在排队等待资源。
这可能是由于内存不足或进程太多造成的。
如果 swpd 列继续不为零,则意味着您正在使用 Swap,这肯定很慢。
您需要找到一种方法将数据从 Swap 交换回内存,方法是添加更多内存或移动很少使用的数据。

4 mpstat -P ALL 1 :我很少使用这个,但它很有用。
例如,如果服务器有 8 个核心,则可以使用 mpstat -P ALL 1 查看哪个 CPU 繁忙,哪个 CPU 空闲。
有时你会发现某个CPU负载特别高,但使用top和vmstat却无法判断。
在这种情况下,您需要使用 mpstat。
可能是与某个核心关联的进程太多。

5 iostat -x 1 :这取决于磁盘。
例如,如果bi(块单位输入)和bo(块单位输出)的值较高,但rrq(每秒请求数)和wrq(每秒写入请求数)不高,则磁盘速度可能较低。
由于硬盘老化,我之前曾遇到过服务器崩溃的情况。
我查看了 iostat,发现延迟(平均延迟)是数十毫秒。
通常应该是几毫秒。
只需更换硬盘即可。

诊断问题,我给大家总结一下流程:

先用top看看是谁使用更多的CPU。

如果 CPU 高,请检查 vmstat 的 wa 是否也高。
如果高,则关注 I/O 并使用 iostat 找出哪个磁盘速度慢。

如果CPU不高,但是内存低,free -m 显示Swap使用较多,那么就是内存问题,增加内存或者优化程序。

如果CPU不高,内存足够的话,可能是网络问题或者其他问题。
这取决于具体情况。

结合使用这些命令,基本上至少可以定位到问题七八点。
当然,具体情况还要具体分析。
例如,如果某些程序是多线程的,那么高 CPU 可能意味着并行处理是正常的,并不一定是问题。
但一般来说,这些命令足够你喝一壶了。

linux如何排查内存问题

说白了,排查Linux内存问题其实很简单,但是你需要知道如何开始。
首先,最重要的报告。
基本规则是焦虑的垫脚石。
因为我们使用 free 命令。
在我们去年跑的一个项目中,我们使用这个命令来查找异常的内存使用情况。
它显示完整内存、已用/可用内存和交换分区状态,这些都是重要信息。
另外一点是top或者htop命令可以主动监控内存,这在监控实时内存进程时特别有用。
另一个是决定性的。
vmstat命令可以分析内存页面情况。
例如,在我们的项目中,我们发现分区的交换使用率过高。

一开始我以为关注内存使用就够了,后来发现我错了。
我们还注意到儿童的记忆力和异常情况。
例如,您可以使用 ps 检查进程内存。
去年我们调查 Java 内存泄漏时,遇到了这个命令。
还有pmap命令,可以分析进程内存映射,帮助我们定位断点。
对于硬件来说,它看起来像C/C++软件。
我们使用这个工具来查找设计中的内存泄漏。

等等,还有一件事,Swap分区和系统分析也很关键。
例如,使用swapon -s来检查SWAP分区的状态。
如果频繁更换系统,可能会导致物理内存不足。
还可以提供系统日志。
例如,dmesg|grep-immemory 可以看到内核内存日志。
sar、strace等高级工具在特定场景下也很有用。
例如,sar可以监视内存的历史记录,并跟踪对进程的系统调用。
对于内存泄漏场景,比如Web服务或者数据库内存持续增长,需要结合进程日志和GC日志来排查。

最后,优化和验证也很重要。
如果缓存使用率很高,可以通过 echo3 >/proc/sys/vm/drop_caches 删除缓存,但在生产环境中要小心。
如果确定存在过程泄漏,则需要进行过程检查或修复代码。
如果物理内存不足,可以升级内存或优化应用程序的内存配置。
很多人没有注意到这一点,但我认为值得一试。
不过,对内存问题的担忧必须根据具体情况而定,不能一概而论。