Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cpu 突然飙高的一下触发了dump操作,但是dump下来的文件使用 go tool pprof 分析文件,好像什么都分析不出来 #123

Open
sk872529557 opened this issue Sep 22, 2022 · 16 comments

Comments

@sk872529557
Copy link

代码:
h, err := holmes.New(
holmes.WithProfileReporter(r),
holmes.WithCollectInterval("30s"),
holmes.WithDumpPath(pprofDumpPath),
holmes.WithLogger(holmes.NewFileLog(holmesLogFilePath, mlog.INFO)),
holmes.WithCPUDump(30, 50,60, time.Minute),
holmes.WithCPUMax(90),
holmes.WithCGroup(true),
)
h.EnableCPUDump()

// start the metrics collect and dump loop
h.Start()

holmes log
image

pprof_file
wecom-temp-151278-ae93f62a8cb7ddf44a471a9863a220a7

看起来感觉cpu突然飙高了一下,然后又正常了,是采集周期或者参数设置的问题吗

@Jun10ng
Copy link
Contributor

Jun10ng commented Sep 22, 2022

可以用文本格式的输出看一下

holmes.WithTextDump(),

ps:
输出的holmes log 里的参数配置 似乎和你代码里声明参数配置 不一致,
log里是 min:20, diff:25 abs 80
代码里是 30, 50, 60

@sk872529557
Copy link
Author

image
但是这里说WithTextDump() 在cpu场景下会失效?

@Jun10ng
Copy link
Contributor

Jun10ng commented Sep 22, 2022

image 但是这里说WithTextDump() 在cpu场景下会失效?

哦,是的。cpu不支持文本格式。

你能给出一个能复现的demo吗,我尝试debug一下

@sk872529557
Copy link
Author

这个是线上容器正在跑的程序,不太好给出demo 也是偶发现象。。。。
也不太好判断这个突然上涨的cpu是采集程序的问题,还是我们容器中程序或者其他问题,从我们自己的监控看cpu并没有出现向log中的尖刺

@Jun10ng
Copy link
Contributor

Jun10ng commented Sep 22, 2022

明白了。
请问这个pprof事件发生的时间点离服务启动的时间近吗?

@sk872529557
Copy link
Author

服务启动一段时间后报出来的,而且是不太稳定的偶发现象,我们看下先调整参数处理。

@nejisama
Copy link
Contributor

这就是标准的pprof文件,dump的是cpu高那一会的快照。可以看下cpu占用情况,然后和正常的pprof对比一下 来看是哪里增高了

@Jun10ng
Copy link
Contributor

Jun10ng commented Sep 22, 2022

这就是标准的pprof文件,dump的是cpu高那一会的快照。可以看下cpu占用情况,然后和正常的pprof对比一下 来看是哪里增高了

是标准的 profile文件,但是profile里没有sample。是不是不太正常。

@cch123
Copy link
Collaborator

cch123 commented Sep 24, 2022

感觉不太正常,profile文件能分享么

@sk872529557
Copy link
Author

@doujiang24
Copy link
Member

这个 profile 文件里,完全没有采样的数据,难道是飙升之后, CPU 跌到几乎为 0 了?

holmes 的逻辑是,飙升之后,会触发采样,采样时长为 5s
如果这 5s 期间,异常消失了,那也是没有办法捕获异常的了

只是你这个文件里,一点数据都没有,比较怀疑是,CPU 跌到几乎为 0 了
你那边有秒级的 CPU 监控不呢?

@Jun10ng
Copy link
Contributor

Jun10ng commented Sep 27, 2022

如果这 5s 期间,异常消失了,那也是没有办法捕获异常的了

就算异常消失了,应该还有在运行的函数,除非这些函数运行很快,无法以默认的频率(100hz)捕获到它们。

@sk872529557
Copy link
Author

我们的容器cpu监控并没有异常,所以现在不太清楚是holmes采集的问题,还是我们监控的问题。
目前看也有能正常dump的cpu pprof 这个问题还没再复现过。

@doujiang24
Copy link
Member

如果这 5s 期间,异常消失了,那也是没有办法捕获异常的了

就算异常消失了,应该还有在运行的函数,除非这些函数运行很快,无法以默认的频率(100hz)捕获到它们。

所以,这里说的是两个问题:

  1. 异常消失,cpu 恢复正常,没法捕获异常,是符合 holmes 机制预期的
  2. profile 完全没数据,只能怀疑 cpu 几乎跌到为 0 了

@doujiang24
Copy link
Member

我们的容器cpu监控并没有异常,所以现在不太清楚是holmes采集的问题,还是我们监控的问题。 目前看也有能正常dump的cpu pprof 这个问题还没再复现过。

你们的监控,有秒级的数据么?如果是分钟级的平均数据,通常是看不出来异常的
holmes 采集的秒级的瞬间值,这个细节需要注意下的

@Darrenzzy
Copy link

#123 (comment)
是的,大家要知道监控是秒级的,这样才能第一时间捕获到信息, 至于上报和后面消耗io的事情可以时间拉久一点。 设置5分钟告警一次即可。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants