使用top命令,可以查看正在运行的进程和系统负载信息,包括cpu负载、内存使用、各个进程所占系统资源等,top可以以一定频率更新这些统计信息。下面我们来学习top命令的具体使用方法。
默认输出
top命令的默认输出如下:
bash[root@localhost ~]# toptop - 10:19:44 up 46 min, 2 users, load average: 0.00, 0.01, 0.05Tasks: 74 total, 2 running, 72 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.7 us, 0.7 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 1016396 total, 66832 free, 448284 used, 501280 buff/cacheKiB Swap: 0 total, 0 free, 0 used. 419772 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2111 root 20 0 143060 13320 1204 S 0.3 1.3 0:04.10 redis-server 2756 root 20 0 157572 2132 1536 R 0.3 0.2 0:00.05 top 1 root 20 0 43172 3560 2420 S 0.0 0.4 0:00.71 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 5 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 0:00.02 kworker/u2:0 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 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 R 0.0 0.0 0:00.69 rcu_sched 10 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd 17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset 18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd 19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md 25 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kswapd0 26 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd 28 root 20 0 0 0 0 S 0.0 0.0 0:00.00 fsnotify_mark[root@localhost ~]#
以上输出上下分成两部分,上半部分显示了整体系统负载情况,各行含义如下:
- top一行:从左到右依次为当前系统时间,系统运行的时间,系统在之前1min、5min和15min内cpu的平均负载值
- Tasks一行:该行给出进程整体的统计信息,包括统计周期内进程总数、运行状态进程数、休眠状态进程数、停止状态进程数和僵死状态进程数
- Cpu(s)一行:cpu整体统计信息,包括用户态下进程、系统态下进程占用cpu时间比,nice值大于0的进程在用户态下占用cpu时间比,cpu处于idle状态、wait状态的时间比,以及处理硬中断、软中断的时间比
- Mem一行:该行提供了内存统计信息,包括物理内存总量、已用内存、空闲内存以及用作缓冲区的内存量
- Swap一行:虚存统计信息,包括交换空间总量、已用交换区大小、空闲交换区大小以及用作缓存的交换空间大小
下半部分显示了各个进程的运行情况,各列含义如下:
- PID: 进程pid
- USER: 拉起进程的用户
- PR: 该列值加100为进程优先级,若优先级小于100,则该进程为实时(real-time)进程,否则为普通(normal)进程,实时进程的优先级更高,更容易获得cpu调度,以上输出结果中,java进程优先级为120,是普通进程,had进程优先级为2,为实时进程,migration 进程的优先级RT对应于0,为最高优先级
- NI: 进程的nice优先级值,该列中,实时进程的nice值为0,普通进程的nice值范围为-20~19
- VIRT: 进程所占虚拟内存大小(默认单位kB)
- RES: 进程所占物理内存大小(默认单位kB)
- SHR: 进程所占共享内存大小(默认单位kB)
- S: 进程的运行状态
- %CPU: 采样周期内进程所占cpu百分比
- %MEM: 采样周期内进程所占内存百分比
- TIME+: 进程使用的cpu时间总计
- COMMAND: 拉起进程的命令
top命令默认输出提供了很多信息,为获取我们关注的信息,可以使用top命令选项,也可以在top运行中使用快捷键过滤输出信息、根据cpu使用率等值对进程进行排序,下面给出具体使用例子。
对输出结果进行排序
top输出的下半部分有很多进程信息列,我们可以根据这些列对进程输出进行排序,默认情况下根据cpu使用率对进程排序。在top命令执行时,按”O”,可以看到排序项以及相应的按键:
bashCurrent Sort Field: K for window 1:DefSelect sort field via field letter, type any other key to return a: PID = Process Id b: PPID = Parent Process Pid c: RUSER = Real user name d: UID = User Id
各项默认以从大到小排序,top运行中,按”R”可反向显示输出结果。
显示特定用户相关进程
在top运行时,按”u”快捷键,可以过滤出特定用户拉起的进程:
bash Which user (blank for all) www 2011 www 20 0 244684 10960 5220 S 0.0 1.1 0:01.43 php-fpm 2012 www 20 0 242484 11136 5444 S 0.0 1.1 0:01.31 php-fpm 2109 www 20 0 21664 2560 1052 S 0.0 0.3 0:00.51 nginx
执行top命令时,使用”top -u www”可以起到相同效果。
显示特定进程
执行top时,使用”-p”选项可以指定要显示的进程:
bash[root@localhost ~]# top -p 2011,2012,1184,2111,2109 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1184 mysql 20 0 1128316 290380 7916 S 0.3 28.6 0:02.91 mysqld 2111 root 20 0 143060 13044 1204 S 0.3 1.3 0:05.28 redis-server 2011 www 20 0 244684 10960 5220 S 0.0 1.1 0:01.55 php-fpm 2012 www 20 0 242484 11136 5444 S 0.0 1.1 0:01.43 php-fpm 2109 www 20 0 21664 2560 1052 S 0.0 0.3 0:00.56 nginx
显示所有cpu核使用情况
默认情况下,top上半部分资源负载信息中,显示的是cpu整体的使用情况:
bash[root@localhost ~]# toptop - 10:19:44 up 46 min, 2 users, load average: 0.00, 0.01, 0.05Tasks: 74 total, 2 running, 72 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.7 us, 0.7 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
按数字”1”快捷键,可以开启/关闭显示各个cpu核的信息:
bash%Cpu0 : 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st%Cpu1 : 0 us, 0 sy, 0.0 ni, 100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
更改top命令显示频率
默认情况下,top命令以3秒的频率更新输出结果,top命令执行时,按”d”可以更新top更新频率:
bashChange delay from 1.0 to 2
执行top命令时,使用”-d”选项也可以指定top输出跟新频率。另外,按空格键,可以手动更新输出。
显示命令的全路径和参数
top运行时,按”c”快捷键,将显示命令的全路径以及命令参数:
bash PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2011 www 20 0 244684 10776 5036 S 0.2 1.1 0:01.60 php-fpm: pool www 2111 root 20 0 143060 13076 1204 S 0.2 1.3 0:05.87 /usr/local/redis/redis-server
指定显示的进程数目
top默认依据窗口大小显示进程数,有时我们对进程排序后,只想关注排在前面的几个进程,使用”-n”快捷键可以达到目的:
bash PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1271 root 20 0 2055276 68720 10860 S 0.7 6.8 0:28.86 java 2073 root 20 0 124060 12252 8328 R 0.2 1.2 0:07.86 AliYunDun 2111 root 20 0 143060 13052 1204 R 0.2 1.3 0:06.46 redis-server 9 root 20 0 0 0 0 R 0.1 0.0 0:01.02 rcu_sched 1184 mysql 20 0 1128316 292428 7916 S 0.1 28.8 0:03.39 mysqld
在top中向进程发送信号
top运行时,按”k”快捷键,可向指定进程发送信号,默认信号为SIGTERM,该信号可中止进程:
bashPID to kill: 15561Kill PID 15561 with signal [15]: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND15561 sshusr 30 10 3700 356 276 R 8.2 0.0 95:33.45 a.out 18 root 20 0 0 0 0 R 2.8 0.0 41:48.24 ksoftirqd/7
更改进程的nice优先级值
top运行时,按”r”快捷键,可以修改指定进程的nice优先级:
bashPID to renice: 17898Renice PID 17898 to value: 10 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND17898 sshusr 20 0 3700 356 276 R 8.3 0.0 0:03.96 a.out 4 root 20 0 0 0 0 R 2.0 0.0 25:51.30 ksoftirqd/0
保存top配置
为看到我们关注的进程、信息,用了很多快捷键,若下次运行top时,想要看到之前关心的内容,又要敲一遍快捷键,这相当不方便。使用”W”快捷键,可以把当前显示配置保存到~/.toprc文件中。
例如以1秒的频率查看前10个占用内存最多的进程,我们需要敲下列快捷键:
bashd: Change delay from 3.0 to: 1n: Maximum tasks = 0, change to (0 is unlimited): 10M: 快捷键”M”指示进程根据内存使用率从大到小排序
之后按下”W”可以对配置进行保存:
bashW: Wrote configuration to '/root/.toprc'
退出再执行top命令,可以看到top以1秒的频率查看前10个占用内存最多的进程,与我们之前保存的配置相符。
Comments 1 条评论
这玩意是个好东西