跳转至

top命令

欢迎阅读《每天一个Linux命令》系列 !在本篇文章中,将说明top命令用法。

一、top简介

top 命令是 Linux 下用于实时监控系统资源使用情况的工具,可以显示 CPU、内存、进程等信息。

二、top使用

输入top,默认进入交互模式,按 q 退出。

top 运行时,可以使用以下键盘操作调整显示内容:

按键 作用
q 退出 top
h 显示帮助信息
P 按 CPU 使用率排序(默认)
M 按内存使用率排序
T 按运行时间排序
N 按进程 ID (PID) 排序
u 只显示特定用户的进程
k 杀死进程(输入进程 ID 后终止)
r 调整进程优先级(修改 nice 值)
s 更改刷新间隔(默认 3 秒)
1 显示每个 CPU 的使用情况
f 进入字段管理,调整显示内容
X 高亮显示当前排序列
Bash
[root@josh ~]# top
top - 13:14:57 up 31 days, 20:38,  1 user,  load average: 0.00, 0.04, 0.05
Tasks: 161 total,   1 running, 160 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.8 us,  0.7 sy,  0.0 ni, 98.3 id,  0.2 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3782688 total,   135020 free,  2031800 used,  1615868 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1419640 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND       
 4308 root      20   0 1032748  55344  19120 S   1.0  1.5   1:44.60 YDService     
 3025 root      20   0  754620  16716   2592 S   0.7  0.4 358:12.40 barad_agent   
18615 polkitd   20   0 1855296 466808   3708 S   0.7 12.3  44:37.04 mysqld        
 1042 postgres  20   0  363216  45080  44116 S   0.3  1.2   0:44.47 postgres      
13031 root      20   0 1279716  62372   7936 S   0.3  1.6   0:14.83 mkdocs        
19659 nginx     20   0  116656  91248   2668 S   0.3  2.4   0:01.79 nginx         
    1 root      20   0  191400   4112   2400 S   0.0  0.1   8:46.64 systemd       
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.61 kthreadd      
    4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H  
    6 root      20   0       0      0      0 S   0.0  0.0   1:59.86 ksoftirqd/0   
    7 root      rt   0       0      0      0 S   0.0  0.0   1:30.61 migration/0   
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh        
    9 root      20   0       0      0      0 S   0.0  0.0  23:13.30 rcu_sched     
   10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain 
   11 root      rt   0       0      0      0 S   0.0  0.0   0:08.49 watchdog/0    
   12 root      rt   0       0      0      0 S   0.0  0.0   0:08.68 watchdog/1    
   13 root      rt   0       0      0      0 S   0.0  0.0   1:29.61 migration/1   
   14 root      20   0       0      0      0 S   0.0  0.0   1:57.80 ksoftirqd/1   
   16 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H  
   18 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kdevtmpfs     
   19 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 netns         
   20 root      20   0       0      0      0 S   0.0  0.0   0:01.97 khungtaskd    
   21 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 writeback     
   22 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kintegrityd   
   23 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset        
   24 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset        
   25 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset        
   26 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kblockd       
   27 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 md   

三、top信息分析

  • up 31 days, 20:38:表示机器运行了 31 天 20 小时 38 分。

  • Load Average0.00, 0.04, 0.05 表示系统在过去的 1、5、15 分钟内的平均负载非常低

  • Tasks:共 161 个进程,其中 1 个正在运行,160 个处于休眠状态,没有停止或僵尸进程。系统正常。

  • %CPU 使用情况:

  • 0.8%:用户进程(us),意味着系统 CPU 时间的 0.8% 被用户空间程序占用。

  • 0.7%:内核进程(sy),即内核服务所占用的 CPU 时间。

  • 98.3%:空闲(id),表示 CPU 大部分时间都处于空闲状态。

  • 0.2%:等待 I/O(wa),表示有一小部分时间 CPU 在等待磁盘或其他 I/O 操作完成。

  • 没有高优先级进程或中断处理程序使用 CPU(hi, si, st 均为 0)。

  • Memory 使用情况:

  • Mem:总内存 3.78 GB,其中 135 MB 是空闲的,约 2 GB 正在使用,1.62 GB 被缓冲和缓存占用。内存使用情况较为合理,没有明显的压力。

  • Swap:没有使用交换空间,表示物理内存足够,没有发生内存溢出到交换空间的情况。

  • 进程相关说明:

  • YDService:PID是4308,用户是root,占用1.0%的CPU和1.5%的内存。看起来这是一个由腾讯云提供的服务,可能与云服务器的管理和监控有关。

  • barad_agent:PID是3025,同样由root运行,占用0.7%的CPU和0.4%的内存。此外,它已经运行了358个小时,说明这是一个长期运行的后台进程。可能与安全或监控相关。

  • mysqld:PID是18615,用户是polkitd,占用0.7%的CPU和12.3%的内存,运行时间超过44小时。显然这是一个MySQL数据库服务器,负责数据库管理,内存占用较高是正常的,因为数据库通常需要大量内存来缓存数据。

  • postgres:PID是1042,用户是postgres,占用0.3%的CPU和1.2%的内存,运行了不到一小时。这是PostgreSQL数据库服务器,可能在运行一些后台任务。

  • mkdocs:PID是13031,用户是root,占用0.3%的CPU和1.6%的内存,运行时间不到15分钟。可能是用于生成文档或静态网站的工具。

  • nginx:PID是19659,用户是nginx,占用0.3%的CPU和2.4%的内存,运行时间不到两分钟。这是Nginx网服务器,可能作为Web服务器或反向代理服务器运行。

  • systemd:PID是1,用户是root,占用0.0%的CPU和0.1%的内存,运行时间超过8小时。这是系统的初始化进程,负责启动和管理其他进程。

  • kthreadd:PID是2,用户是root,占用0.0%的CPU和0.0%的内存,运行时间不到一分钟。这是内核线程管理的主要进程,负责创建和管理其他内核线程。

  • kworker/0:0H:PID是4,用户是root,优先级为-20,占用0.0%的CPU和0.0%的内存,运行时间不到一分钟。这是一个内核工作线程,用于执行异步任务。

通过以上分析,可以看出系统中大部分进程都是内核线程或系统服务,负责各种底层管理和维护任务。用户进程如mysqld、postgres、nginx等占用了较多的资源,特别是mysqld占用了12.3%的内存,可能在执行内存密集型的数据库操作。YDService和barad_agent等腾讯云相关进程占用了较低的资源,主要用于云服务的管理和监控。整体来看,系统资源使用较为平衡,没有明显的资源瓶颈或异常占用。