Linux 命令之 top -- 实时显示进程动态/查看进程信息

文章目录

  • 介绍
  • 常用选项
  • 交互命令
  • 参考示例
    • 示例 1:直接输入命令 `top` 就可以动态显示进程信息
      • 统计参数信息详解
      • 进程属性说明(即进程列表的字段说明)
  • 其它
    • 1.在 top 基本视图中,按键盘数字 `1` 可以监控每个逻辑 CPU 的状况
    • 2.敲击键盘 `b`,打开关闭加亮效果,top 视图变换如下:
    • 3.敲击键盘 `x` 打开/关闭排序列的加亮效果,top 视图变换如下:
    • 4.改变 top 基本视图中的进程显示字段
    • 5.使用命令 sar 报告每个 CPU 的状态
    • 6.使用命令 mpstat 显示各个可用 CPU 的状态:
    • 7.使用命令 cat 查看某个进程的详情

介绍

top 命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析。

在 top 命令中按 f,可以修改显示的列,按对应字母来开启/关闭列,大写字母表示开启,小写字母表示关闭。带 * 号的是默认列。

通俗点说,Linux 中的 top 命令就像是 Windows 中的任务管理器。它会以列表的形式展示出系统的当前状态以及进程信息,并且定时刷新,同时也支持一些交互性的操作。

常用选项

选项说明
-b以批处理模式操作
-c显示完整的治命令
-d屏幕刷新间隔时间
-I忽略失效过程
-s保密模式
-S累积模式
-i<时间>设置间隔时间
-u<用户名>指定用户名
-p<进程号>指定进程
-n<次数>循环显示的次数

交互命令

在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了 -s 选项, 其中一些命令可能会被屏蔽。

选项说明
CTRL+L刷新整个屏幕,重新开始显示
h 或者 ?显示帮助
k终止一个进程,杀掉进程。输入 k 之后,会提示用户输入 PID 及要发送哪种信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽
i忽略闲置和僵死进程,这是一个开关式命令
q退出 top 程序
r重新安排一个进程的优先级别,重新设置进程优先级,即 renice。输入 r 之后,会提示用户输入 PID 及新的 nice 值。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10
S切换到累计模式
s改变两次刷新之间的延迟时间(单位为 s),改变刷新周期,更改刷新间隔时间。输入 s 之后,会提示用户输入新的刷新周期,单位为秒。如果有小数,就换算成 ms。输入 0 值则系统将不断刷新,默认值是 5s
f/F从当前显示中添加或者删除项目。添加或删除进程列表中的列。输入 f 之后会显示字母与列的映射表,再输入对应字母就可以开关相应的列。
o/O改变显示项目的顺序
l切换显示平均负载和启动时间信息,切换显示界面中第一行信息(时间和平均负载),隐藏或显示第一部分第一行 top 信息
m切换显示内存信息,关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
t切换显示进程和 CPU 状态信息,隐藏或显示第一部分第二行 Tasks 和第三行 Cpus 信息
c切换显示命令名称和完整命令行
M根据驻留内存大小进行排序,按%MEM对进程排序,就是以内存占用率大小的顺序排列进程列表
P根据CPU使用百分比大小进行排序,即以 CPU 占用率大小的顺序排列进程列表
T根据时间/累计时间进行排序,按TIME+对进程排序
w将当前设置写入~/.toprc文件中
空格立即刷新信息
n设置进程列表中的显示数量
u指定在进程列表中只显示对应用户的进程
1切换展开CPU统计信息。展开后,会分别显示CPU每个逻辑核心的占用
N按PID的大小对进程排序
H切换在进程列表中显示所有线程信息

参考示例

示例 1:直接输入命令 top 就可以动态显示进程信息

[root@htlwk0001host ~]# top

直接得到如下结果:


top - 22:29:09 up 201 days, 12:27,  4 users,  load average: 0.00, 0.00, 0.00
Tasks: 129 total,   1 running, 128 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.5 id,  0.0 wa,  0.2 hi,  0.0 si,  0.0 st
MiB Mem :   3635.0 total,    167.1 free,   1510.5 used,   1957.4 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1842.6 avail Mem PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                    545465 root      20   0  803208  11376   4664 S   0.3   0.3  27:29.87 aliyun-service                                                                                                             785225 root      10 -10  182296  29176  10860 S   0.3   0.8  60:21.74 AliYunDun                                                                                                                  1 root      20   0  179148   9736   6740 S   0.0   0.3  12:37.12 systemd                                                                                                                    2 root      20   0       0      0      0 S   0.0   0.0   0:02.72 kthreadd                                                                                                                   3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                                                                                                                     4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp                                                                                                                 6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H 

统计参数信息详解

第一行,任务队列信息,同 uptime 命令的执行结果一样

top - 09:44:56                  # 当前系统时间
up 201 days                     # 系统已经运行了 201 天
4 users                         # 当前登录用户数 4 个
load average: 9.59, 4.75, 1.92  # 系统负载,即任务队列的平均长度,系统1分钟、5分钟、15分钟内的平均负载值。load average 数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了                             

第二行,Tasks,任务(进程)信息

Tasks: 145 total                # 总进程数
2 running                       # 正在运行的进程数,对应状态 TASK_RUNNING
143 sleeping                    # 睡眠的进程数,对应状态 TASK_INTERRUPTIBLE 和 TASK_UNINTERRUPTIBLE
0 stopped                       # 停止的进程数,对应状态 TASK_STOPPED
0 zombie                        # 冻结进程数,僵尸进程数,对应状态TASK_ZOMBIE。

第三行,cpu 状态,CPU使用率等信息

99.8%us                         # user space 用户空间占用 CPU 百分比,即进程在用户空间消耗的CPU时间占比,不包含调整过优先级的进程
0.1%sy                          # sysctl 内核空间占用CPU百分比,即进程在内核空间(system)消耗的CPU时间占比
0.0%ni                          # nice 用户进程空间内改变过优先级的进程占用CPU百分比,即调整过用户态优先级的(niced)进程的CPU时间占比
0.2%id                          # idle 空闲CPU百分比,空闲的CPU时间占比。
0.0%wa                          # wait 等待输入输出(I/O)完成的CPU时间百分比
0.0%hi                          # Hardware IRQ 处理硬中断的CPU时间占比
0.0%si                          # software interrupt 处理软中断的CPU时间占比
0.2%us                          # user space 用户空间占用CPU的百分比
0.0%st                          # 当Linux系统是在虚拟机中运行时,等待CPU资源的时间(steal time)占比

第四行,内存状态

4147888k total                  # 物理内存总量
2493092k used                   # 使用的物理内存总量
1654796k free                   # 空闲内存总量
158188k buffers                 # 用作内核缓存的内存量

第五行,swap 交换分区信息

5144568k total                  # 交换区总量
56k used                        # 使用的交换区总量
5144512k free                   # 空闲交换区总量
2013180k cached                 # 缓冲的交换区总量

备注:

Swap 分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的数据被临时保存到 Swap 分区中,等到那些程序要运行时,再从 Swap 分区中恢复保存的数据到内存中。

Swap 分区,即交换区,系统在物理内存(这里应该是运行内存)不够时,与 Swap 进行交换。 其实,Swap的调整对 Linux服务器,特别是Web服务器的性能至关重要。通过调整 Swap,有时可以越过系统性能瓶颈,节省系统升级费用。

关于缓冲的交换区总量,这里解释一下,所谓缓冲的交换区总量,即内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。

计算可用内存数有一个近似的公式: 第四行的 free + 第四行的 buffers + 第五行的 cached。

对于内存监控,在 top 里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,第四行中空闲内存总量(free)是内核还未纳入其管控范围的数量。

纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。

进程属性说明(即进程列表的字段说明)

列名	含义
PID	         # 进程id
PPID	     # 父进程id
RUSER	     # Real user name
UID	         # 进程所有者的用户id
USER	     # 进程所有者的用户名
GROUP	     # 进程所有者的组名
TTY	         # 启动进程的终端名。不是从终端启动的进程则显示为问号 ?
PR	         # 优先级,从系统内核角度看的进程调度优先级
NI	         # 进程的nice值。负值表示高优先级,正值表示低优先级,即从用户空间角度看的进程优先级。值越低,优先级越高。
P	         # 最后使用的CPU,仅在多CPU环境下有意义
%CPU	     # 上次更新到现在的CPU时间占用百分比,进程在一个更新周期内占用的CPU时间比例
TIME	     # 进程使用的CPU时间总计,单位秒
TIME+	     # 进程使用的CPU时间总计,进程创建后至今占用的CPU时间长度,单位 1/100 秒
%MEM	     # 进程使用的物理内存百分比
VIRT	     # 进程使用的虚拟内存总量,进程申请使用的虚拟内存量,单位 kb。VIRT=SWAP+RES,
SWAP	     # 进程使用的虚拟内存中,被换出的大小,单位kb
RES	         # 进程使用的、未被换出的物理内存大小,就是进程使用的驻留内存(即未被swap out的内存)量。单位 kb。RES=CODE+DATA 
CODE	     # 可执行代码占用的物理内存大小,单位kb
DATA	     # 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位 kb
SHR	         # 进程使用的共享内存量,进程使用的共享内存大小,单位 kb
nFLT	     # 页面错误次数
nDRT	     # 最后一次写入到现在,被修改过的页面数。
S	         # 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程,进程状态。R=running,S=interruptible sleeping,D=uninterruptible sleeping,T=stopped,Z=zombie。
COMMAND	     # 命令名/命令行,运行进程使用的命令。
WCHAN	     # 若该进程在睡眠,则显示睡眠中的系统函数名
Flags	     # 任务标志

部分参数详解:

VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量

RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小

SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out 后,它将会降下来

DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。

其它

默认进入 top 时,各进程是按照 CPU 的占用量来排序的。

1.在 top 基本视图中,按键盘数字 1 可以监控每个逻辑 CPU 的状况

在这里插入图片描述

按数字 1 后可以看到 8 个逻辑 CPU(%Cpu0 到 %Cpu7)各自的运行情况。

2.敲击键盘 b,打开关闭加亮效果,top 视图变换如下:

在这里插入图片描述
如上图所示,PID 为 16283 的进程是当前 top 视图中唯一的运行态进程。也可以敲击键盘 y 来打开或者关闭运行态进程的加亮效果。

3.敲击键盘 x 打开/关闭排序列的加亮效果,top 视图变换如下:

在这里插入图片描述

如上图所示,可以看到现在是按 %CPU 进行排序的,可以按 shift+> 或者 shift+< 左右改变排序序列。

4.改变 top 基本视图中的进程显示字段

在 top 基本视图中,敲击 f 进入另一个视图,在这里可以编辑基本视图中的显示字段:

在这里插入图片描述
这里列出了所有可在 top 基本视图中显示的进程字段,有 * 并且标注为大写字母的字段是可显示的,没有 * 并且是小写字母的字段是不显示的。用上下键选择选项,按下空格键或者 d 可以决定是否在基本视图中显示这个字段。如果要在基本视图中显示 CODEDATA 两个字段,可以通过敲击 rs 键,enter 返回基本视图,可以看到多了 CODEDATA 两个字段。

5.使用命令 sar 报告每个 CPU 的状态

[root@htlwk0001host ~]# sar -P ALL
Linux 4.18.0-193.6.3.el8_2.x86_64 (htlwk0001host) 	2021年03月13日 	_x86_64_	(2 CPU)00时00分05秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
00时10分05秒     all      0.27      0.00      0.19      0.00      0.00     99.54
00时10分05秒       0      0.27      0.00      0.20      0.00      0.00     99.53
00时10分05秒       1      0.27      0.00      0.17      0.00      0.00     99.55[root@htlwk0001host ~]# sar -P ALL > aaa.txt # 重定向输出内容到文件 aaa.txt

6.使用命令 mpstat 显示各个可用 CPU 的状态:

[root@htlwk0001host ~]# mpstat -P ALL
Linux 4.18.0-193.6.3.el8_2.x86_64 (htlwk0001host) 	2021年03月13日 	_x86_64_	(2 CPU)13时37分08秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
13时37分08秒  all    0.16    0.01    0.05    0.00    0.04    0.02    0.00    0.00    0.00   99.72
13时37分08秒    0    0.16    0.01    0.05    0.00    0.04    0.04    0.00    0.00    0.00   99.71
13时37分08秒    1    0.16    0.01    0.05    0.00    0.04    0.01    0.00    0.00    0.00   99.73
[root@htlwk0001host ~]# 

7.使用命令 cat 查看某个进程的详情

[root@htlwk0001host ~]# cat /proc/34295/status # 34295 是 PID
Name:	svnserve
Umask:	0022
State:	S (sleeping)
Tgid:	34295
Ngid:	0
Pid:	34295
PPid:	1
TracerPid:	0
Uid:	0	0	0	0
Gid:	0	0	0	0
FDSize:	64
Groups:	0 
NStgid:	34295
NSpid:	34295
NSpgid:	34295

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 命令之 iostat 命令-监视系统输入输出设备和 cpu 的使用情况

介绍 iostat命令被用于监视系统输入输出设备和 CPU 的使用情况。它的特点是汇报磁盘活动统计情况&#xff0c;同时也会汇报出 CPU 使用情况。同 vmstat 一样&#xff0c;iostat 也有一个弱点&#xff0c;就是它不能对某个进程进行深入分析&#xff0c;仅对系统的整体情况进行分…

else 策略模式去掉if_如何用卫语句、策略模式、状态模式重构if-else语句

《java开发手册》中:况且日常开发时遇到一推的if-else着实让人头疼!so&#xff0c;现在开始改造一、卫语句卫语句就是把复杂的条件表达式拆分成多个条件表达式&#xff0c;即代码逻辑先考虑失败、异常、中断、退出等直接返回的情况&#xff0c;以方法多个出口的方式&#xff0c…

oracle同步恢复目录,Oracle创建恢复目录(catalog)

Oracle创建恢复目录(catalog)&#xff0c;在catalog数据库上创建cat用户的表空间。Oracle创建恢复目录1.在catalog数据库上创建cat用户的表空间SQL> create tablespace cat datafile /home/oracle/oradata/orcl/cat.dbf size 512M;2.创建cat用户SQL> Create user cat ide…

java登录界面命令_Java命令行界面(第3部分):jbock

java登录界面命令在本系列中有关使用Java进行命令行分析的前两篇文章中&#xff0c;我介绍了Apache Commons CLI和args4j库。 在本系列的第三篇文章中&#xff0c;我介绍了jbock &#xff0c;它是自我描述的“非常简单的CLI解析器”。 我在Java命令行解析中的帖子使用了一些示…

数仓建模 项目_模型设计_数仓建模 PDF 下载

主要内容&#xff1a;数据仓库按照传统的定义&#xff0c;数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。从数据角度&#xff0c;数据仓库更适合传统的数据库&#xff0c;离线采集&#xff0c;数据一般为结构化的。当然…

Linux 命令之 htop -- 互动的进程查看器/查看进程信息

文章目录介绍与 top 的对比常用选项参考示例&#xff08;一&#xff09;启动 htop&#xff08;二&#xff09;以单色模式启动 htop&#xff08;三&#xff09;设置显示更新的延迟为 3 秒&#xff08;四&#xff09;显示指定用户的进程介绍 htop 命令是Linux系统中的一个互动的…

java中转json字符串_如何在Java中转义JSON字符串-Eclipse IDE技巧

java中转json字符串在Java应用程序中工作或进行JSON解析时&#xff0c;通常很常见的做法是从某些资源&#xff08;例如RESTful Web服务&#xff09;中复制粘贴JSON字符串&#xff0c;然后使用Jackson库解析JSON。 这是在Java中测试和学习解析JSON字符串的最快方法&#xff0c;但…

home oracle c.sql,Infoxmix与Oracle的嵌入式SQLC对比

Infoxmix和Oracle的嵌入式SQL/C开发对比ESQLC和PROC的对比本文档介绍了数据库嵌入式SQL/C语言程序ESQLC和PROC的区别一&#xff0e;基本语法1&#xff0e;语法字符ESQLC中既支持…$?数据库语法&#xff0c;同时也支持“EXEC SQL”&#xff0c;…:?数据库语法PROC中只支持“EX…

spock 集成测试_使用Spock Mocks进行Grails 3.3集成测试

spock 集成测试在Grails单元测试中&#xff0c;可以轻松使用Grails随附的Spock框架来模拟或存根协作者&#xff08;例如服务&#xff09;。 “ 测试”一章对模拟协作者&#xff0c; doWithSpring / doWithConfig回调方法&#xff0c;在测试中模拟bean的FreshRuntime批注进行了…

uni开发中可以用table标签么_「uni-app 组件」t-table 表格

table 表格基本使用组件&#xff0c;让你制作简单表格只需要专注内容&#xff0c;而不用过度专注样式。此组件基本全平台支持。(支付宝&#xff0c;百度&#xff0c;头条小程序理论上都支持&#xff0c;但是没有很细致的测试这几个平台)功能亮点自定义全局表格样式自定义局部表…

Linux 命令之 kill -- 杀死进程

文章目录命令介绍语法格式常用选项参考示例&#xff08;一&#xff09;列出所有信号的名称&#xff08;二&#xff09;杀掉 bash 进程命令介绍 kill 正如这个单词的意思一样&#xff0c;就是杀死。linux 系统中 kill 命令用来删除执行中的程序或工作。 kill 命令用来删除执行…

gwt-2.8.2下载_从GWT开发人员的角度概述Scala.js

gwt-2.8.2下载该博客严重偏向于GWT&#xff08;和基于GWT的框架&#xff09;&#xff0c;但是我谨记&#xff0c;将来GWT可能会被其他技术取代&#xff0c;因此我们始终愿意探索其他平台/框架。 正如他们所说&#xff0c;多元化可以降低风险。 每种编程语言&#xff0c;即使是最…

Linux 命令之 killall 命令-使用进程的名称来杀死一组进程

文章目录介绍语法格式常用选项参数参考示例介绍 killall 命令使用进程的名称来杀死进程&#xff0c;使用此指令可以杀死一组同名进程。我们可以使用kill命令杀死指定进程 PID 的进程&#xff0c;如果要找到我们需要杀死的进程&#xff0c;我们还需要在之前使用 ps 等命令再配合…

python selenium 点击开始按钮_使用Selenium和Python单击一个按钮

I have the following code:Expand allWhen I click on expand all, the whole page loads. How can I do it using WebDriver for Python?解决方案As per the HTML you can use the find_element_by_link_text and invoke click() method as follows :driver.find_element_by…

COLLATE oracle,Sql 中Collate用法

今天查询sqlite的时候需要不区分大小写&#xff0c;查了下文档&#xff0c;需要使用collate nocase.顺便学习下collate的用法。collate在sql中是用来定义排序规则的。排序规则其实就是当比较两个字符串时&#xff0c;根据某种规则来确定哪个比较大&#xff0c;是否相等。各个数…

Linux 命令之 nslookup 命令-查询域名 DNS 信息的工具

文章目录介绍常用选项参考示例介绍 nslookup命令的英文全称为 “query Internet name server interactively ”。nslookup命令主要用来查询域名的DNS信息。在使用nslookup之前&#xff0c;先确保已经安装了它&#xff0c;nslookup属于bind-utils包下一个命令 。 nslookup有两…

jdeps_JDeps入门–分析项目的依赖关系

jdepsJDeps是Java依赖关系分析工具 &#xff0c;这是一个命令行工具&#xff0c;它处理Java字节码&#xff08;意味着.class文件或包含它们的JAR&#xff09;&#xff0c;并分析类之间静态声明的依赖关系。 可以用各种方式过滤结果&#xff0c;并可以将其汇总到包或JAR级别。 J…

extjs5的grid垂直滚动条bug_ExtJS 6.2.1 Classic Grid 滚动条bug解决方案

如果列表同时存在横向滚动条和竖向滚动条&#xff0c;当竖向滚动条滚动到底部时点击横向滚动条&#xff0c;滚动条会自动滚动到顶部此bug未在其他版本发现&#xff0c;参考高版本代码重写类解决此bug&#xff0c;直接上代码&#xff1a;/*** 如果列表同时存在横向滚动条和竖向滚…

禁止linux使用密码ssh,linux centos7服务器使用密钥登录ssh同时禁止root密码登录

这两天在大量的给服务器添加密钥&#xff0c;有的服务器简单绑定下就行了。但是京东云目前就毕竟弱了&#xff0c;得自己手动来。目前京东云的服务器需要自己手动修改配置&#xff0c;才能用密钥登录服务器&#xff0c;不然默认还是root用密码登录。把密钥保存到本地&#xff0…

cloudwatch_将CloudWatch Logs与Cloudhub Mule集成

cloudwatch在此博客中&#xff0c;我将解释如何为您的Mule CloudHub应用程序启用AWS Cloudwatch日志 。 AWS提供了Cloudwatch Logs Services&#xff0c;以便您可以更好地管理日志。 它比松散便宜。 由于cloudhub会自动翻转超过100 MB的日志&#xff0c;因此我们需要一种机制来…