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 占用居高不下 #1004

Closed
mir355 opened this issue Nov 19, 2020 · 11 comments
Closed

CPU 占用居高不下 #1004

mir355 opened this issue Nov 19, 2020 · 11 comments
Labels
done This issue is done, which may be release in next version. enhancement

Comments

@mir355
Copy link

mir355 commented Nov 19, 2020

Build Detail:
Go Version: go1.13.4
GF Version: v1.13.1
Git Commit: 1db1828b35c15b4a92cd144c33e636eb52d7ec07
Build Time: 2020-06-14 21:01:20

今日进行代码漏洞扫描,指标如下:

2个并发请求
250ms请求延迟

1、持续5分钟后,系统4核CPU全部占满,
2、7分钟后,应用服务响应变慢,
3、扫描结束30分钟后,CPU资源仍未释放

20201119163428

profile001

@gqcn
Copy link
Member

gqcn commented Nov 19, 2020

@mir355 哥,你这Top10,还有你这图,连一个gf包的影子都没有啊,你需要我怎么帮助你啊?😅

@gqcn gqcn added the question label Nov 19, 2020
@mir355
Copy link
Author

mir355 commented Nov 20, 2020

我也是看不懂这个图了,竟然找不到入手点,所以才向大佬求助。
1、为啥pprof 里没有gf包的影子,是不是埋点有问题?
2、这几个较高的runtime 方法,可能被触发的原因是啥?
我感觉导致其一直hold CPU 资源不放的原因是在某个位置的代码触go的内部死循环了,帮我分析下切入点呗,大佬。

@gqcn
Copy link
Member

gqcn commented Nov 21, 2020

我也是看不懂这个图了,竟然找不到入手点,所以才向大佬求助。
1、为啥pprof 里没有gf包的影子,是不是埋点有问题?
2、这几个较高的runtime 方法,可能被触发的原因是啥?
我感觉导致其一直hold CPU 资源不放的原因是在某个位置的代码触go的内部死循环了,帮我分析下切入点呗,大佬。

你如果使用gf的pprof或者net/http的pprof功能,那么埋点不会有问题的。你得从你代码入口入手,判断下哪里可能会有性能问题。初步看了下是不是你引用了其他的第三方包引起的?把你所有的包都列出来分析下,为什么要引入,你的请求中使用了哪些包?

@mir355
Copy link
Author

mir355 commented Dec 1, 2020

今日又跟踪了一下,发现是这个包 “github.com/json-iterator” 大量报错导致fmt频繁内存操作导致CPU飙高。但问题仍未解决,请大佬帮忙解决问题。

分析gf源码,如下文件引用了这个包

nternal/json/json.go

我代码单独引用该包只用了如下两个方法

json.Unmarshal
json.Marshal

pprof 截图如下

1606818316(1)

profile001

@gqcn
Copy link
Member

gqcn commented Dec 2, 2020

@mir355 你好,我初步看了没看出什么缘由来,要不你去 github.com/json-iterator/go 问问看,这个包好像也是国人开发的。有什么结果我也想了解一下。

@mir355
Copy link
Author

mir355 commented Dec 3, 2020

这个包在gf 框架中使用了很多,我没看出我的哪种错误姿势引发了这个问题。另我自己方法的err 里也没有明显的报错信息。
已在对方的项目提交issue
json-iterator/go#516
感谢大佬帮忙跟进

@mir355
Copy link
Author

mir355 commented Dec 7, 2020

@gqcn 大佬,对方的项目似乎没人维护啊,你确定一直用这个包做你json 的解析吗? 我代码里该包引用的方法我都去掉了,问题仍然存在,我确认应该是gf 框架里方法引用导致的。
请协助解决,或告知 https://github.com/gogf/gf/blob/master/internal/json/json.go 这个文件有什么方法可以调试

@gqcn
Copy link
Member

gqcn commented Dec 8, 2020

@gqcn 大佬,对方的项目似乎没人维护啊,你确定一直用这个包做你json 的解析吗? 我代码里该包引用的方法我都去掉了,问题仍然存在,我确认应该是gf 框架里方法引用导致的。
请协助解决,或告知 https://github.com/gogf/gf/blob/master/internal/json/json.go 这个文件有什么方法可以调试

@mir355 这个有专门封装的,切换/去掉都很容易,我特意创建了一个分支,去掉了这个包的使用,你试试go get -u github.com/gogf/gf@1e7f795c6993be992865042943e476da17ee8dae 再试试还有没问题?

@BlackCodes
Copy link

我们把这个库,通过extension的方式,深度定制了一次,看到大佬们的问题,心里有点慌了,期待大佬们的最终解决方式。

@mir355
Copy link
Author

mir355 commented Dec 11, 2020

@gqcn 大佬出手立竿见影,以前压测CPU每次都爆,换新版本后10%都用不上。
可以开心过年了

@gqcn
Copy link
Member

gqcn commented Dec 11, 2020

@mir355 这么看这个第三方包是有点问题,我先去掉吧。

@gqcn gqcn added done This issue is done, which may be release in next version. enhancement and removed question labels Dec 11, 2020
@gqcn gqcn closed this as completed Dec 27, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
done This issue is done, which may be release in next version. enhancement
Projects
None yet
Development

No branches or pull requests

3 participants