本篇以 普通账号(非root)角度,描述htop软件上各信息的含义,确定是哪些账号、哪些任务PID、哪些操作命令导致了集群卡顿,及时、准确的向管理员反馈情况。
 

什么是htop

  Htop是一个用于 Linux / 类 Unix 系统的交互式实时进程监控应用程序,也是top 命的升级版。它可以显示Linux系统上正在运行的进程信息,被广泛用于监视服务器的负载。
 
  它的结果界面如图所示:
htop主页面
  对普通用户而言,htop好在哪? 它可以水平滚动查看完整命令行,再也不用担心因为屏幕小,无法全部显示完整命令行了。

htop软件安装

简要介绍如下,conda详细安装、使用见上篇文章Linux下conda的安装与使用

1、# 激活conda,进入base环境
      conda activate
2、#切换进入要安装的work环境
      conda  activate work
3、#使用conda安装,conda自动
      mamba install htop
4、# htop是使用
      which htop
      {abs_path}/htop

htop展示信息介绍

  htop的显示分为3个部分: 头部(红+黄)、进程区域(蓝)、操作提示区(绿)
htop界面

解释各部分参数含义

头部(红)

下图为软件help说明中的配图,来说明CPU、Mem、Swap的状态:
表头的使用说明

(1)0-31分别代表CPU处理器/核,上图是一个三十二核的处理器。

(2)每一个数字对应着一个(progress bar),说明每一个CPU的总用量情况。
  不同的颜色含义:
  蓝色:显示低优先级进程使用的CPU百分比。
  绿色:显示用于普通用户拥有的进程的CPU百分比。
  红色:显示系统进程使用的CPU百分比。
  橙色:显示IRQ时间使用的CPU百分比。
  洋红色:显示Soft IRQ时间消耗的CPU百分比。
  灰色:显示IO等待时间消耗的CPU百分比。
  青色:显示窃取时间(Steal time)消耗的CPU百分比。

(3)物理内存(Mem)、交换(Swp)分区的信息:
  绿色:显示内存页面占用的RAM百分比
  蓝色:显示缓冲(buffer )区页面占用的RAM百分比
  橙色:显示缓存(cache)页面占用的RAM百分比

  简单来说,缓存(cache)是用来加速数据从硬盘中"读取"的,而缓冲(buffer )是用来加速数据"写入"硬盘的。通常来说,某个登录、计算节点感觉卡顿,经常是buffer或者cache的某一项占比过高。两者具体关系可以看 Linux内存buffer和cache的区别

(4)Hostname:软件展示的具体是哪个服务器的负载情况

头部(黄)

  显示了任务数量、平均负载和连接运行时间等信息;

第一行(Tasks, thr, running)
  1879个任务(tasks)被分解为1382个线程(thread),其中只有1个进程处于运行(running)状态。
  任务(tasks)是打开的进程总数的代表,但并不是每个打开的进程都在不断消耗CPU。 每个进程都处于几种状态:
  R: Running:表示进程(process)正在使用CPU
  S: Sleeping: 通常进程在大多数时间都处于睡眠状态,并以固定的时间间隔执行小检查,或者等待用户输入后再返回运行状态。
  T/S: Traced/Stoped: 表示进程正在处于暂停的状态
  Z:Zombie or defunct:已完成执行但在进程表中仍具有条目的进程。

第二行(Load Average)
  三个值是指系统在最后1分钟,最近5分钟和最后15分钟的平均负载 (0.44,0.58,0.66)。一半情况下,当三个值的负载高于20或40时,会明显感觉服务器卡顿明显。

第三行(Uptime)
  表示这个系统一共运行了多长的时间,这里已经运行了66天。

进程区域(蓝)

htop界面

  • PID – 描述进程的ID号
  • USER – 描述进程的所有者(谁跑的)
  • PRI – 描述Linux内核查看的进程优先级
  • NI – 描述由用户或root重置的进程优先级
  • VIRT – 它描述进程正在使用的虚拟内存 (virtual memory)
  • RES – 描述进程正在消耗的物理内存(physical memory)
  • SHR – 描述进程正在使用的共享内存(shared memory)
  • S – 描述流程的当前状态 (state)
  • CPU% – 描述每个进程消耗的CPU百分比
  • MEM% – 描述每个进程消耗的内存百分比
  • TIME+ – 显示自流程开始执行以来的时间
  • Command –它与每个进程并行显示完整的命令执行 (比如java)

  通过对CPU、MEM占比进行排序,找出占用最多的任务,便可大致确认哪些是造成集群I/O过载,卡顿的任务

操作提示区(绿)

1、帮助文档查看
(1)查看操作手册

# 查看htop的官方使用说明
   man htop

htop使用手册
(2)软件自带的help功能
  在上图展示的htop界面,输入"h" 即可进入软件的"F1 Help"功能。linux下F3等无法使用时,可使用对应的字母、符号快捷键(S / \ 等)。
htop软件快捷键说明
2、常用的htop功能展示
① F2 Setup(快捷键S)
  配置界面中的显示信息,Meters配置头部信息,Columns配置进程区域信息。

setup使用
  以上图为例,Left column是目前头部(红)展示的服务器信息,Right column是头部(黄)展示的信息,Available meters是可选择在头部两列中展示所有信息。 Columns同理。
  常用操作为键盘上下、左右用于移动,Enter 作为确认键,Del 作为取消键,具体可自行尝试设置。

② F3 Search(快捷键 /)
  输入" / “可在进程区域进入搜索状态,通过输入Search关键字,可筛选出符合的任务。Esc键 可取消搜索状态。
htop-search功能
③ F4 Filter(快捷键 \)
  输入” \ "可在进程区域进入搜索状态,通过输入Filter关键字,可筛选出符合的任务。Esc键 可取消搜索状态。

④ F5 Tree(快捷键 t)
  在上图展示的htop界面,输入"t" 即可进入。再输入" t “从tree状态恢复到list状态。
htop-tree功能
⑤ F6 SortBy(快捷键 >)
  在上图展示的htop界面,输入”>" 即可进入。通过方向键上下选择想要排序的类型,Enter 作为确认键,Esc键 可退出排序状态。
htop-sort功能
  在上图展示的htop界面,输入大写的 “M”、 "P"即可按照内存、CPU消耗对进程进行排序,这是 快捷键 的使用方法。

⑥ F7 Nice - (快捷键 ])
  F8 Nice + (快捷键 [)
  “]” 的作用是提高光标选择任务的优先级,nice值减少,只有root账号有权限这么做。"["的作用是降低光标选择任务的优先级,nice值增加。

⑦ F9 Kill (快捷键 k)
  在上图展示的htop界面,光标移动到想要kill的任务,输入"k" 即可进入。通过方向键上下选择想要kill掉的类型,Enter 作为确认键,Esc键 退出。效果等同Linux系统下 kill 掉 “ps -aux |grep user " 找到的高IO命令。
htop-kill功能
⑧ F10 Quit (快捷键 q)
  在上图展示的htop界面,输入"q” 即可推出htop界面。

 

常用快捷键汇总

  • h:打开帮助窗口并查看此处未提及的更多快捷方式。
  • u:显示特定用户拥有的所有进程。
  • P:基于高CPU消耗对进程进行排序,对应CPU%列。
  • M:基于高内存消耗对进程进行排序,对应MEM%列。
  • T:基于进程运行的时间排序,对应TIME+列。
  • I: 对排序的结果进行反转显示。
  • T:根据时间段对过程进行排序。

使用场景

(1)查看集群占用CPU、MEM比较大的任务PID,锁定使用人及该任务运行的command

# htop的信息默认每0.1s刷新一次,100方便查看内容
	htop -d 50 # 每隔5s刷新一次

进入htop界面后:
  ①查看服务器目前的Load average在最近1、5、15分钟的负载情况,了解持续时间;
  ②观看Tasks信息,了解是否有"T"、“Z"等异常状态任务,很可能它们就是服务器卡顿原因。
  ③观察CPU、Mem、Swp的条型柱及颜色,简单判断卡顿任务是写入多,还是读取多。 对Mem而言,橙色(cache)占比多是 读取数据多,蓝色(buffer)多是 写入硬盘的数据多。
  ④通过输入大写的 “M”、 “P”,对进程的内存、CPU消耗进行排序,锁定对应的PID、USER、Command;
 
(2)查看某账号,在服务器上运行的所有任务
  进入htop界面后,输入小写"u”,上下移动选择账号名称,Enter 作为确认键,找到该账号所有的任务。之后可结合常用快捷键,按照内存、CPU、时间消耗来对任务排序,或者杀掉自己的某个任务。

 

参考文件

1、htop官网
2、了解 htop 命令的输出
3、用 30 个实例完全解读 TOP 命令
4、htop使用详解–史上最强(没有之一)
5、Linux htop 详解

 
 

补充top简单信息

简单来说:
  1、Load Average的数值别超过这台机器的总核数,就基本没啥问题。
  2、CPU中,us长期过高,表明用户进程占用了大量的CPU时间。us+sy如果长期超过80或者90,代表CPU性能不足。
  3、Swap交换分区的used数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

具体可看如下两篇文章:
1、《每天一个linux命令(44):top命令》
https://www.cnblogs.com/peida/archive/2012/12/24/2831353.html

2、10分钟教会你看懂top
https://cloud.tencent.com/developer/article/1786959

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐