获取具有最高内存使用的进程的用户的脚本?

17 浏览
0 Comments

获取具有最高内存使用的进程的用户的脚本?

如何编写一个脚本,以输出系统中使用最多内存的进程的用户。这个脚本是用sh编写的。我尝试使用top命令作为起点,但似乎它不能与管道一起使用,因为它会一直运行直到退出。

0
0 Comments

问题的出现原因:用户想要找到在其系统中使用最多内存的进程的用户。

解决方法:使用以下脚本可以找到使用最多内存的进程的用户。

top -o VIRT -n 1 | head -8 | tail -1 | cut -d ' ' -f 5

解决方法的步骤如下:

- `top -o VIRT` 允许用户覆盖默认的列排序,按照VIRT列进行排序。

- `top -n 1` 允许用户限制top命令在退出之前的迭代次数。在这里只需要一次迭代,就像在录制视频时拍照一样,可以在特定的时刻保存信息。

- `| head -8` 允许用户只输出前8行的结果。为什么是8行?因为top在显示进程表之前会显示很多其他信息,所以我们不需要这些额外的行。

- `| tail -1` 允许用户获取前面一步得到的前8行结果中的最后一行。

- `cut -d ' ' -f 5` 允许用户按列分割文本,其中 `-d ' '` 是指定空格作为分隔符,`-f 5` 允许用户获取第五列的内容。为什么是第五列?因为在实际值PID(在我的例子中是6249)之前有一些空格,并且在使用空格分割之后的前三列是空的。第五列是用户名。

整个过程如下:

mneznaev-desktop:~$ top -o VIRT -n 1 | head -8 | tail -1 | cut -d ' ' -f 5
mneznaev

希望这对你有帮助。

0
0 Comments

在CentOS中,可以通过以下命令获取内存使用最多的进程的用户:

[root ~] # ps aux | sort -k 4 -r | head -n2
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      7048  0.2  9.6 8060236 1573612 ?     Ssl  Dec14   8:23 java -Djava.security.e

其中,sort -k 4表示按第4列排序,这里的第4列代表%MEM(内存占用百分比)。在其他Linux/Unix系统中,可能需要确定正确的列号以获取内存占用情况。

目前,通过以下命令可以得到离目标最近的结果: ps aux | sort -k 4 -r | head -n2 | tail -n1。输出结果为: robot 3024 3.1 4.6 2946368 176980 ? SLl 04:39 7:13 /opt/google/chrome/chrome。

我关注的是只获取用户,即robot。

可以使用下面的命令来实现:

ps aux | sort -k 4 -r | awk 'NR==2 {print $1}'

以上就是如何获取内存使用最多的进程的用户的解决方法。

0
0 Comments

问题的出现原因:用户想要获取使用内存最多的进程的用户名称。

解决方法:使用以下脚本可以获取使用内存最多的进程的用户名称:

$ ps axho user --sort -rss | head -1

该脚本通过检查进程的驻留内存大小rss来获取结果。如果想要检查整个虚拟大小,可以使用vsz替代rss。如果想要获取使用的驻留内存百分比,可以使用pmem(但由于调度器的原因,这个值可能会随时变化,并不一定是最大的内存占用)。如果想要获取用户ID而不是用户名称,可以使用uid代替user。

ps命令的选项如下:

- ax:获取所有进程

- h:输出中不包含标题

- o:指定输出格式,这里使用user(用户名称)

- --sort -rss:按rss进行排序(降序)

head -1命令用于去除除第一行以外的所有行(第一行包含最大的rss,因为是按降序排列)。

如果希望获取更多关于进程的信息,可以使用以下脚本:

$ ps axho user,pid,rss --sort -rss | head -1

该脚本在一行上提供了用户名称、进程ID和驻留内存使用量。可以根据需要在脚本中单独提取这些值。

脚本中出现的错误信息是由于在Windows系统中没有找到head命令。

0