假如有一个 web 后台服务 cpu/内存占用过高,是否有类似 jstack 的工具,可以定位到具体的代码呢
![]() | 1 Latin   2022-01-21 16:24:16 +08:00 ![]() |
![]() | 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 |