Linux命令系列之top——里面藏着很多鲜为人知的宝藏知识
nanshan 2024-11-01 12:39 9 浏览 0 评论
简介
top命令是我们经常用来查看系统信息的一个指令,它提供了一个动态的而且是实时的借口帮助我们去查看系统执行时的进程、线程和系统参数的信息。
top命令输出内容详细剖析
首先我们先看一下top命令的输出结果:
我们现在一一分析这些字段的含义:
第一行
- 12:53:04表示当前时间,也就是当前真实的时间。
- up 157 days 13:35,表示这个系统从启动到现在的时间,上图显示的含义就是这个系统从157天13个小时35分钟以前就启动了。
- 5 users 表示当前在使用这个机器的用户数量。
- load average: 0.00, 0.00, 0.00 ,这个值表示系统过去1分钟,5分钟,15分钟的系统负载。现在有一个问题就是,什么是这里谈到的系统负载。所谓系统负载,我们拿一分钟来举例子,我们将一分钟一个CPU时间定义为t,在这一分钟之内总共消耗的CPU时间为c,那么在这一分钟之内的负载为ct,需要注意的是这个消耗的CPU时间c是可以大于t的,因为一个程序可能使用了多个CPU(并发程序,也可能是多个进程同时在使用不同的CPU)。
比如上面图中的1分钟内的负载大约是10,那么在过去的一分钟之内系统当中各种程序所消耗的CPU时间为c=10.04×t。他表示的意思就是在过去的1分钟之内,CPU时间的消耗可以看作大约有10个CPU在满负荷运转。注意:这里是可以看作是10个CPU在满负荷的运转,其实真实情况可以是在过去的一分钟之内有20个CPU在进行计算,然后每个CPU的计算时间为12t,或者其他相同的CPU消耗情况。
第二行
- 第二行主要表示当前系统当中任务的相关情况,所谓任务就是当前系统当中一共有多少个进程。
- 652 totoal,这个表示当前系统当中一共有652个进程。
- 1 runnung,表示有一个进程正在执行。
- 651 sleeping,表示有651个进程处于睡眠状态,也就是不需要使用CPU的状态。
- 0 stoped,表示有0个进程处于stopped状态,这个状态就是被停下来的进程,比如说通过ctrl+z让一个进程停下来,你可以通过给这个进程发送一个信号SIGCONT让这个进程恢复执行,linux当中进程的状态变换如下所示:
- 0 zombie,这个就表示僵尸进程的个数,这里是0个僵尸进程,所谓僵尸进程就是一个进程执行完成了,对于C程序来说你可以理解为你的main函数执行完成了(这个不够准确,其实main函数执行完成之后还会有其他函数需要执行,但是这里你可以大致这么理解),如果这个时候(函数执行完成),这个进程的父进程却没有接受子进程发送给他的信号(子进程在执行完成之后会给父进程发送信号,父进程需要通过wait等系统调用去接受这个信号),那么子进程就处于zombie状态,处于这个状态的进程就需要父进程接受它发送的信号,然后子进程的系统资源就可以被回收了,然后子进程会彻底消亡。
我们现在花一点时间来谈一谈linux当中的进程状态。
- Ready,当进程被创建完成之后他就处于Ready状态,在这个状态下的进程只差CPU了,也就是说,他现在只需要被操作系统调度获取CPU然后他就可以执行了。
- Running,当进程从Ready状态获取CPU的执行权的时候,进程就处于Running状态,这个状态表示进程正在执行。
- traced,这个状态主要是一个进程处于调试状态,这个状态需要调试的进程给这个被调试的进程发送信号,然后和这个进程才可以继续执行。
- Zombie,当进程执行完成之后,父进程接受子进程发送的信号之前,进程就处于这个状态。
- Suspended,这个状态表示进程被挂起,当进程请求IO的时候,需要阻塞等待IO请求完成,这个时候的进程状态就是Suspened状态。
第三行
这一行主要是各种时间所占的百分比的统计,这个数据的统计时间区间是,从本次刷新到上一次刷新之间,实在这个区间统计的数据
- us,运行没有指定优先级的用户进程所消耗的CPU时间所占百分比,默认的终端执行的程序都是没有指定优先级的,我们可以使用nice这个命令来改变程序执行的优先级:sudo nice -n -10 ./time。
- sy,运行内核进程所消耗的CPU时间所占的百分比。
- ni,运行指定了修改过优先级之后的用户进程所占的CPU时间百分比。这里可以结合PR和NI两个字段进行分析,我们现在执行sudo nice -n 10 ./a.out命令,在./a.out当中我启动了10个死循环的线程,我们来看一下它的top输出结果:
从上面的结果来看我们通过nice命令修改来进程优先级,但是需要主要的是一个进程的PR值越大他的优先级越低,NI值越大优先级越低,也就是说我们上面实际上是降低了进程执行的优先级了,但是我们可以看到ni的值是发生变化了的,这也印证了上面我们所谈到的ni值发生变化的过程。我们再来看一下没有设置优先级的结果,直接执行sudo ./a.out:
但是在实验测试的过程当中发现了一个奇怪的问题,但我们提升进程的优先级(提升优先级需要管理员权限)的时候ni的值没有发生变化,因此上面所谈到的ni的变化应该只适用于普通用户的进程(因为降低优先级不需要管理员权限)。
- id, idle进程执行所占的CPU时间百分比,当系统当中没有足够的进程让CPU执行的时候,idle进程会被调度到CPU上进行执行,这个idle进程是为了让操作系统能够良好的执行起来所设置的,idle进程主要执行HLT指令,这个指令主要是让CPU节能,不需要CPU满负荷运转,因为这个时候没有具体的进程需要执行,这个百分比越大说明系统负载越轻,CPU不繁忙。
- wa,这个很好解释,等待IO的时间。
- hi,处理硬件中断所消耗的时间。
- si,处理软件中断所消耗的时间
- st,这个时间稍微有点复杂,IBM解释原文为:
Steal time is the percentage of time a virtual CPU waits for a real CPU while the hypervisor is servicing another virtual processor.
这个主要是虚拟机的虚拟CPU等待真实物理CPU的时间,可以大致认为是Ready状态到Running状态的等待时间,如果这个值越大说明虚拟机运行状态越不好,因为它等待真实CPU的时间很长。
第四行
这一行表示的是物理内存的信息,单位是KiB。
- total, 表示一共有多少内存,也就是物理内存大小。
- free, 表示还有多少物理内存没有使用。
- used, 表示使用了多少物理内存。
- buff/cache, 表示用于用于缓存的物理内存的大小。
第五行
这一行主要表示的是对换区的数据,所谓对换区就是当操作系统发现内存满了之后,操作系统会选择部分不常使用的页面将它放到磁盘当中当需要使用的时候再将这部分数据从磁盘当中读取出来。
- total, 表示对换区的总大小。
- free, 表示对换区当中还有多少空间没有使用。
- used, 表示对换区当中有多少空间被使用了。
- 最后一项 avail Mem 是一个可用于启动新程序的内存大小的估计值。
表头内容含义
- PID,表示进程号,就是每个进程的ID。
- USER,就是用户的名称。
- PR,优先级值。
- NI,nice值,通过程序给进程设置的。
- VIRT,进程使用的虚拟内存的大小,单位是KiB。
- RES,常驻内存的内存大小,单位是KiB。
- SHR,共享内存的大小,单位是KiB。
- S,表示进程的状态,有一下几个状态。D,不能够中断的睡眠状态。R,表示程序正在CPU上执行。S,表示进程正在睡眠。T,进程被信号停止执行。t,表示进程正在被调试器追踪,调试器将这个进程停了下来。Z,zombie表示是一个僵尸进程。
- %CPU,上次一刷新之前对应的进程对CPU的占有率,这个值是可以突破100%的,因为一个进程可以有多个进程,比如下面这样,我们开启10个线程进行死循环:
#include <pthread.h> void* func(void * args) { while (1) { /* code */ } } int main() { #define num_threads 10 pthread_t t[num_threads]; for(int i = 0; i < num_threads; i++) { pthread_create(&t[i], NULL, func, NULL); } for (size_t i = 0; i < num_threads; i++) { pthread_join(t[i], NULL); } return 0;}
执行上面的程序之后,top的输出结果如下所示:
从上面的这个结果我们可以知道CPU的占有率是可以超过%100的,这个值的计算主要是在刷新之间内一个进程消耗的CPU时间和在这段时间内一个CPU能够产生的CPU时间的比值。
- %MEM,这个主要是进程使用的内存占用实际的可用的物理内存的比例。
- TIME+,这个表示自从进程启动以来累计消耗的CPU时间。
- COMMAND,这个表示启动进程的时候执行的命令。
top命令交互操作
- c,详细显示命令行的内容,你在交互模式下直接按下键盘上的c即可。
- o,在交互模式下先按下键盘上的o,然后就可以输入过滤条件,在这里掩饰的是COMMAND=a.out的进程:
- k,shell给我们提供了一个非常方便的操作我们可以在交互模式下选择我们想要杀死的进程,比如在下图当中我们杀死进程135020。
我们先在交互模式下先按下键盘上的k,然后输入进程号,然后输入回车,再输入想发送的信号类型。
输入进程号
再输入想要发送的信号:
这里可以输入代表信号的数字,也可以输入代表信号的名字,不同的信号的名字和代表输入如下:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+338) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+843) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+1348) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-1253) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-758) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-263) SIGRTMAX-1 64) SIGRTMAX
- u,通过用户过滤,在交互模式下按下键盘上的u键,然后就可以输入你想看那个用户的进程,输入对应的用户名称即可,比如说看root用户的进程:
然后我们就只能够看到root用户的进程了。
- h,查看帮助信息:
- i,过滤掉CPU利用率很低的进程,很多时候我们在进行系统分析的时候需要去判断那个进程CPU占有率高,因此i是一个非常有效的方式过滤掉干扰进程。
相关推荐
- F5负载均衡器如何通过irules实现应用的灵活转发?
-
F5是非常强大的商业负载均衡器。除了处理性能强劲,以及高稳定性之外,F5还可以通过irules编写强大灵活的转发规则,实现web业务的灵活应用。irules是基于TCL语法的,每个iRules必须包含...
- 映射域名到NAS
-
前面介绍已经将域名映射到家庭路由器上,现在只需要在路由器上设置一下端口转发即可。假设NAS在内网的IP是192.168.1.100,NAS管理端口2000.你的域名是www.xxx.com,配置外部端...
- 转发(Forward)和重定向(Redirect)的区别
-
转发是服务器行为,重定向是客户端行为。转发(Forward)通过RequestDispatcher对象的forward(HttpServletRequestrequest,HttpServletRe...
- SpringBoot应用中使用拦截器实现路由转发
-
1、背景项目中有一个SpringBoot开发的微服务,经过业务多年的演进,代码已经累积到令人恐怖的规模,亟需重构,将之拆解成多个微服务。该微服务的接口庞大,调用关系非常复杂,且实施重构的人员大部分不是...
- 公司想搭建个网站,网站如何进行域名解析?
-
域名解析是将域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转...
- 域名和IP地址什么关系?如何通过域名解析IP?
-
一般情况下,访客通过域名和IP地址都能访问到网站,那么两者之间有什么关系吗?本文中科三方针对域名和IP地址的关系和区别,以及如何实现域名与IP的绑定做下介绍。域名与IP地址之间的关系IP地址是计算机的...
- 分享网站域名301重定向的知识
-
网站域名做301重定向操作时,一般需要由专业的技术来协助完成,如果用户自己在维护,可以按照相应的说明进行操作。好了,下面说说重点,域名301重定向的操作步骤。首先,根据HTTP协议,在客户端向服务器发...
- NAS外网到底安全吗?一文看懂HTTP/HTTPS和SSL证书
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:可爱的小cherry搭好了NAS,但是不懂做好网络加密,那么隐私泄露也会随时发生!大家好,这里是Cherry,喜爱折腾、玩数码,热衷于分享数...
- ForwardEmail免费、开源、加密的邮件转发服务
-
ForwardEmail是一款免费、加密和开源的邮件转发服务,设置简单只需4步即可正常使用,通过测试来看也要比ImprovMX好得多,转发近乎秒到且未进入垃圾箱(仅以Mailbox.org发送、Out...
- 使用CloudFlare进行域名重定向
-
当网站变更域名的时候,经常会使用域名重定向的方式,将老域名指向到新域名,这通常叫做:URL转发(URLFORWARDING),善于使用URL转发,对SEO来说非常有用,因为用这种方式能明确告知搜索引...
- 要将端口5002和5003通过Nginx代理到一个域名上的操作笔记
-
要将端口5002和5003通过Nginx代理到域名www.4rvi.cn的不同路径下,请按照以下步骤配置Nginx:步骤说明创建或编辑Nginx配置文件通常配置文件位于/etc/nginx/sites...
- SEO浅谈:网站域名重定向的三种方式
-
在大多数情况下,我们输入网站访问网站的时候,很难发现www.***.com和***.com的区别,因为一般的网站主,都会把这两个域名指向到同一网站。但是对于网站运营和优化来说,www.***.com和...
- 花生壳出现诊断域名与转发服务器ip不一致的解决办法
-
出现诊断域名与转发服务器ip不一致您可以:1、更改客户端所处主机的drs为223.5.5.5备用dns为119.29.29.29;2、在windows上进入命令提示符输入ipconfig/flush...
- 涨知识了!带你认识什么是域名
-
1、什么是域名从技术角度来看,域名是在Internet上解决IP地址对应的一种方法。一个完整的域名由两个或两个以上部分组成,各部分之间用英文的句号“.”来分隔。如“abc.com”。其中“com”称...
- 域名被跳转到其他网站是怎么回事
-
当你输入域名时被跳转到另一个网站,这可能是由几种原因造成的:一、域名可能配置了域名转发服务。无论何时有人访问域名,比如.com、.top等,都会自动重定向到另一个指定的URL,这通常是在域名注册商设...
你 发表评论:
欢迎- 一周热门
-
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
WindowsServer2022|配置NTP服务器的命令
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
WIN11 安装配置 linux 子系统 Ubuntu 图形界面 桌面系统
-
解决Linux终端中“-bash: nano: command not found”问题
-
NBA 2K25虚拟内存不足/爆内存/内存占用100% 一文速解
-
Linux 中的文件描述符是什么?(linux 打开文件表 文件描述符)
-
K3s禁用Service Load Balancer,解决获取浏览器IP不正确问题
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)