如何通过Shell脚本查看占用CPU和内存高的进程?

本教程中包含两个脚本,可帮助您确定高 CPU/内存消耗进程在 Linux 上运行的时间。

该脚本将向您显示进程 ID、进程所有者、进程名称以及进程运行的时间。

这可以使用 ps 命令来实现。

什么是ps命令

ps 代表进程状态,它显示有关系统上活动/正在运行的进程的信息。

它提供当前进程的快照以及详细信息,如用户名、用户 ID、CPU 使用情况、内存使用情况、进程开始日期和时间命令名称等。

1) Bash 脚本来检查高 CPU 消耗进程在 Linux 上运行了多长时间

此脚本将帮助您确定高 CPU 消耗进程在 Linux 上运行的时间。

image.png

# vim /opt/scripts/long-running-cpu-proc.sh

#!/bin/bash
ps -eo pid,user,ppid,%mem,%cpu,cmd --sort=-%cpu | head | tail -n +2 | awk '{print $1}' > /tmp/long-running-processes.txt
echo "--------------------------------------------------"
echo "UName     PID  CMD            Process_Running_Time"
echo "--------------------------------------------------"
for userid in `cat /tmp/long-running-processes.txt`
do
username=$(ps -u -p $userid | tail -1 | awk '{print $1}')
pruntime=$(ps -p $userid -o etime | tail -1)
ocmd=$(ps -p $userid | tail -1 | awk '{print $4}')
echo "$username $userid $ocmd $pruntime"
done | column -t
echo "------------------------
--------------------------"

执行脚本得到如下结果:


image.png



2) 检查高内存消耗进程在 Linux 上运行多长时间的 shell 脚本


image.png



#vim  long-running-memory-proc.sh
#!/bin/bash
ps -eo pid,user,ppid,%mem,%cpu,cmd --sort=-%mem | head | tail -n +2 | awk '{print $1}' > /tmp/long-running-processes-1.txt
echo "--------------------------------------------------"
echo "UName     PID  CMD          Process_Running_Time"
echo "--------------------------------------------------"
for userid in `cat /tmp/long-running-processes-1.txt`
do
username=$(ps -u -p $userid | tail -1 | awk '{print $1}')
pruntime=$(ps -p $userid -o etime | tail -1)
ocmd=$(ps -p $userid | tail -1 | awk '{print $4}')
echo "$username $userid $ocmd $pruntime"
done | column -t
echo "--------------------------------------------------"

运行得到如下结果:

image.png


脚本文件:

shell 文件.zip

标签: shell

作者头像
南宫俊逸创始人

君子好学,自强不息~

上一篇:Linux 系统怎么查看网络接口详细信息?
下一篇:Linux 查看内存使用情况的8个命令

发表评论

阿里云2021年 618 年中钜惠活动