假如有一个 web 后台服务 cpu/内存占用过高,是否有类似 jstack 的工具,可以定位到具体的代码呢
1
Latin 2022-01-21 16:24:16 +08:00 2
|
2
ChrisFreeMan 2022-01-21 16:28:09 +08:00
&t=524s
|
4
huangz003 2022-01-21 17:17:25 +08:00
阿里的 arthas 应该可以吧
|
5
wynemo 2022-01-21 17:37:36 +08:00
|
6
chevalier 2022-01-21 17:50:19 +08:00
CPU 过高,perf top
|
7
anonymous256 2022-01-21 19:52:47 +08:00
一般说来,web 服务不涉及 CPU 密集型的任务。比较依赖 CPU 资源的主要在于解码或数学计算类的任务。所以即便你找到了好工具,很可能也解决和发现什么问题。
大多数程序性能的障碍在于:内存数据的写读依赖,不必要的计算和循环,算法的选择,不必要的 I/O 操作,多进程的数据竞争。你可以在程序内用通过日志输出高精度的时间,直接来捕捉到影响性能关键的代码区域,重新看代码逻辑分析具体是什么原因。 以「不必要的计算和循环」为例,我就遇到这样的代码,比如明明一个 for 循环就可以直接完成 AB 操作。但是有的程序员,会先写一个 for 循环执行 A 操作,再来一次 for 循环执行 B 操作。就导致了无谓的双倍内存访问。在比如明明一次 SQL 查询就能解决问题,他要查询两次,然后对数据进行关联和处理。就是不必要的操作和计算。 通常情况,性能的问题是人的问题。 |
8
anonymous256 2022-01-21 19:54:20 +08:00
错误:“很可能也解决和发现什么问题”
修正:“很可能也发现和解决不了什么问题。” |
10
lululau 2022-01-21 20:24:45 +08:00 via iPhone
dtrace/ bpftrace
|
11
guyskk0x0 2022-01-21 20:31:37 +08:00 via Android
pyinstrument, py-spy
|
12
joApioVVx4M4X6Rf 2022-01-22 09:14:21 +08:00
同问楼主,找到相关工具没有
|
13
IurNusRay OP @anonymous256 恩,这确实是比较实用常见的处理方式,不过偶尔碰到不知道是哪个请求或者哪个任务导致了 cpu/内存占用过高的情况,所以想知道是否有一种监控的工具可以协助定位
|
15
DeanThompson 2022-01-24 15:21:15 +08:00
@guyskk0x0 +1 ,两个都用过,再稍微补充一点内容:
- pyinstrument 需要埋点(植入代码),适合线下做 profile - py-spy 可以对运行中的进程进行采样,适合线上。有个 top 命令可以实时展示当前忙碌的代码 |
16
zky001 2022-01-24 17:50:47 +08:00
dis+cProfile
|