我有一个单核 VPS,其平均负载有时会超过 25。当达到这个值时,它就会变得慢得令人无法忍受,甚至通过 运行的命令(dash
速度比 更快且占用的 RAM 更少bash
)也需要一段时间才能运行。我如何才能追踪导致高负载的进程?
答案1
您可以安装htop
。它的优点htop
是它会在顶部显示每个 CPU 的使用情况,以及内存和交换使用情况的有意义的文本图表。
安装htop
:
sudo apt-get install htop
启动它:
htop
按下F6
对流程进行排序,然后使用导航键进行选择PERCENT_CPU
并按回车键。
或者你可以使用top
这种方式使用(来源):
top -b -n 1 | head -n 12
答案2
下面的内容只是从Unix.SE:如果 CPU 使用率超过 60%,则查找占用 CPU 最多的进程?,尽管当然适合这个问题。
按特定 CPU 使用率列出进程
ps ahux --sort=-c | awk '{if($3>0.0)printf"%s %6d %s\n",$3,$2,$11}'
这将列出具有 CPU 使用率的进程列表>0.0
,您可以根据需要更改此值,例如>50.0
。每行包含 CPU 使用率百分比、PID 和进程的文件。
列出 CPU 使用率最高的进程
ps ahux --sort=-c | awk 'NR<=5{printf"%s %6d %s\n",$3,$2,$11}'
NR<=5
这显示了当前造成 CPU 负载最大的前 5 个( )进程。
答案3
昨天学习的时候awk
,我玩了一下另外两个答案。结果如下:
仅获取 CPU 使用率最高的进程,使用方法
ps aux
:ps auxh | awk -v max=0 '{if($3>max){CPU=$3; PID=$2; NAME=$11; max=$3}} END{printf "%5s %6d %s\n",CPU,PID,NAME}'
获取 CPU 使用率最高的三个进程,使用方法如下
top
:top -b -n 1 | awk 'NR>7 && NR<11 {printf "top: %5s %6d %s %s\n",$9,$1,$12,$13}'
获取 CPU 使用率最高的三个进程,使用方法如下
ps aux
:ps auxh --sort=-c | awk 'NR<=3 {printf "ps: %5s %6d %s\n",$3,$2,$11}'
我试图同时运行最后两个命令(使用<command>; wait; <command>
和<command> & <command> &
),但后来我意识到这根本是不可能的:)
参考:
- 当前问题中的另外两个不错的答案(以及此评论@αғsнιη)。
- 找到文件第 1 列的最大值,并打印第 2 列的相应记录。
- 如何运行 awk 来处理一定行数?
答案4
使用top
命令
top
-显示 Linux 进程top 程序提供正在运行的系统的动态实时视图。它可以显示系统摘要信息以及当前由 Linux 内核管理的进程或线程列表。显示的系统摘要信息类型以及显示的进程信息类型、顺序和大小都是用户可配置的,并且该配置可以在重新启动后保持不变。