Skip to content

排查线上环境CPU占用过高

查看占用情况

shell
top

top 命令是 Linux 和类 UNIX 系统中用于实时监控系统性能的工具。它提供了关于系统运行状态、CPU 和内存使用情况、正在运行的进程等信息。以下是一些关于 top 命令的重要概念和用法:

顶部信息:top 命令输出的顶部部分显示系统的基本信息,包括系统时间、系统运行时长、当前登录用户数、负载平均值(load average),以及 CPU 和内存使用情况。

进程列表:下面部分显示系统上正在运行的进程,默认按 CPU 使用率排序。你可以看到每个进程的 PID、用户、优先级、虚拟内存和常驻内存使用量、CPU 使用率、内存使用率等信息。

交互式操作:top 命令是交互式的,你可以在运行过程中进行操作。以下是一些常用的交互式命令:

  • q 退出 top。
  • h 查看帮助。
  • k 输入要终止的进程 ID。
  • r 更改进程的优先级(优先级越低,进程优先级越高)。
  • f 或 F 调整显示的字段。
  • o 重新排序进程列表。
  • s 调整刷新频率。

An image

定位到具体的线程

通过上面我们可以定位的进程的ID为15244,接下来我们要定位到该进程的哪个线程占用CPU比较高,使用如下命令,其中15244为进程ID。

shell
top -Hp 15244

An image

此时可以定位到是线程15253、15249、15251……占用CPU比较高

输出16进制线程ID

将线程号(15253)转为16进制(后面用)

shell
printf ‘0x%x\n 15253

An image

定位线程调用栈

通过以下命令把定位的进程线程调用栈保存下来,其中929为进程ID

shell
jstack 15244 > 15244.log

打开日志文件,查找0x3b95n 查看问题所在

未完待续