it-swarm.cn

如何找到占用所有内存的进程?

我在寻找CPU使用率最高的东西。 top是否有命令行参数可以执行此操作?目前,我的记忆已满,甚至“ man top”都因内存不足而失败:)

87
ripper234

top内部,您可以尝试以下操作:

  • 按 SHIFT+f
  • 按与%MEM对应的字母
  • 按 ENTER

您也可以尝试:

$ ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -5

这将按内存使用量列出前5个进程。

107
Steven D

如果您安装了它,我喜欢htop一旦启动它,您可以按 f6, down arrow (至 MEM%), enter 按内存排序。

11
xenoterracide

top开始后,按 F 切换到排序字段屏幕。通过按左侧列出的键选择列出的字段之一;你可能想要 N MEM%

7
Michael Mrozek

在Solaris中,您需要的命令是:

prstat -a -s size

这将按递减的映像大小列出所有进程。请注意,后者基于操作系统提交给进程的内存,而不是其驻留的物理内存使用率。

可能有适用于Solaris的“ top”版本,但这些不是标准安装的一部分。

6
Joel Hoff

top的一个不错的选择是htop。选中它,它比常规top更友好。

5
Klark

它可以通过多种方式实现,我最喜欢的一种是:

PS方式:

  1. [[email protected] ~]$ ps -eo pid,cmd,%cpu,%mem --sort=-%mem

    哪里,

    • -e:选择所有进程
    • -o:适用于输出格式
    • pidcmd%cpu%mem:以准确的顺序输出格式。在此,可以使用pcpupmem代替%cpu%mem
    • 但是可悲的是(不知道为什么)它不起作用在某些机器(Oracle Linux)和某些较旧的机器上。您可以使用以下类似的替代方法。
  2. [[email protected] ~]$ ps -eo pid,cmd,%cpu,%mem --sort -rss

    哪里,

    • -rss:常驻集大小,任务已使用的未交换物理内存
  3. [[email protected] ~]$ ps --cols 120 aux --sort -rss

    哪里,

    • --cols 100:指定输出的列宽,因为cmd有时会很长。如果您不希望使用带参数的缩减命令,则没有必要。
    • aux:使用BSD语法查看系统上的每个进程

顶部方式

[[email protected] ~]$ top -b -o +%MEM

哪里,

  • -b:将top用作batch模式。
  • -o:覆盖排序字段名,后跟一个字段名%MEM

而且,您始终可以使用head和/或tail来控制输出。

1
muhammad

此命令将确定最消耗内存的进程:

ps -A --sort -rss -o pid,pmem:40,cmd:500 | head -n 6 | tr -s " " ";z"
1
user90191

全局:始终建议使用日志分析器工具记录Splunk,ELK等历史日志。这样,使用查询语言就可以轻松获取CPU和内存的PID及其使用情况。

AT SERVER/OS LEVEL:从顶部开始,您可以尝试以下操作:

 Press SHIFT+M  ---> This will give you a process which takes more memory in descending order.

您也可以尝试:

$ ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -10

这将按内存使用量列出前10个进程。您也可以使用vmstat实用程序同时查找RAM)用法,而不用于历史记录。

0
Santosh Garole

你可以试试 ps aux --sort -rss | head 要么 ps aux | sort -nk +4 | tail

0
David Okwii