线上CPU飙高问题排查!
https://v.douyin.com/iRTqH5ug/
linux top命令
top
命令是 Linux 下一个强大的实用程序,提供了系统资源使用情况的动态、实时概览。它显示了当前正在运行的进程信息,以及有关系统性能和资源利用情况的信息。
以下是 top
命令提供的关键信息的简要概述:
-
头部信息:
- top - 这是显示一般系统信息的标题,包括当前时间、运行时间、用户数量、负载平均值和进程总数。
- Tasks - 关于进程总数及其状态(运行中、睡眠中、停止等)的信息。
- Cpu(s) - CPU 使用信息,包括 CPU 在用户进程、系统进程和空闲时间上花费的时间百分比。
- Mem - 内存使用信息,包括总内存、已用内存、空闲内存和缓存内存。
-
进程表:
top
显示的主要部分是包含有关各个进程的信息的表格。它包括列,如:- PID - 进程 ID。
- USER - 进程的所有者。
- PR - 进程的优先级。
- NI - 进程的 nice 值。
- VIRT - 虚拟内存使用。
- RES - 驻留内存使用。
- SHR - 共享内存。
- S - 进程状态(例如,运行中的 R,睡眠中的 S)。
- %CPU - 进程使用的 CPU 百分比。
- %MEM - 进程使用的 RAM 百分比。
- TIME+ - 进程使用的总 CPU 时间。
-
交互式命令:
- 在运行
top
时,您可以使用各种交互式命令来控制和自定义显示。一些常见命令包括:- q - 退出
top
。 - k - 终止进程。
- Spacebar - 更新显示。
- 1 - 在显示单个 CPU 和摘要之间切换。
- H - 切换线程视图。
- u - 显示特定用户的进程。
- q - 退出
- 在运行
要运行 top
,只需在终端中键入 top
,然后按 Enter 键。您可以按 q
键退出 top
。这是一个用于监视系统性能并识别资源密集型进程的多功能工具。
ps H -eo pid,tid,%cpu | grep 11481 什么意思
这个命令使用了 ps
命令,结合了一些选项来显示进程(process)和线程(thread)的信息,特别是关于进程 ID(PID)、线程 ID(TID)和 CPU 使用率的信息。然后,通过 grep
命令过滤出包含 11481
的行。
具体来说,命令的含义如下:
-
ps H
: 列出进程和线程信息,但不显示标题行。 -
-eo pid,tid,%cpu
: 定义ps
命令的输出格式,只显示 PID(进程ID)、TID(线程ID)和 %CPU(CPU使用率)这三列。 -
|
: 将ps
命令的输出通过管道传递给下一个命令。 -
grep 11481
: 在ps
输出中过滤包含字符串11481
的行。
综合起来,这个命令的目的是找出 PID 或 TID 为 11481
的进程或线程,并显示它们的 CPU 使用率。请注意,PID 是进程 ID,而 TID 是线程 ID。
printf ‘0x%x\n’ 11562 什么意思
这命令使用 printf
命令将整数 11562
转换为十六进制表示法。具体来说:
-
printf
: 这是一个格式化输出的命令,通常用于按照指定格式打印数据。 -
'0x%x\n'
: 这是printf
命令的格式字符串。在这里,%x
是用于表示十六进制数字的格式指示符。0x
是十六进制的前缀。\n
是一个换行符,用于在输出中创建新的一行。 -
11562
: 这是要转换为十六进制表示法的整数。
因此,这个命令的目的是将整数 11562
转换为十六进制,并以 0x
为前缀的形式打印出来。实际的输出结果将是 0x2d9a
。
jstack 11481 | grep 0x2d2a -A 20
这个命令使用 jstack
工具生成 Java 进程的线程转储(thread dump),然后使用 grep
过滤包含字符串 0x2d2a
的行,并显示这一行及其后面的 20 行。
具体来说:
-
jstack 11481
: 这个部分使用jstack
工具来获取进程 ID 为11481
的 Java 进程的线程转储。线程转储是一个显示 Java 程序中所有线程当前状态的快照。 -
|
: 管道符,将jstack
命令的输出传递给下一个命令。 -
grep 0x2d2a
:grep
命令用于在文本中搜索包含指定字符串(在这里是0x2d2a
)的行。 -
-A 20
:grep
命令的选项,表示要显示匹配行及其后续的 20 行。
综合起来,这个命令的目的是从 Java 进程的线程转储中找到包含字符串 0x2d2a
的行,并显示这一行及其后续的 20 行。这可能用于分析 Java 线程的堆栈信息,特别是与某个特定的内存地址(在这里是 0x2d2a
)相关的线程信息。