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

egg部署在线上环境,偶发性CPU居高不下 #3381

Closed
DodoMonster opened this issue Jan 9, 2019 · 12 comments
Closed

egg部署在线上环境,偶发性CPU居高不下 #3381

DodoMonster opened this issue Jan 9, 2019 · 12 comments

Comments

@DodoMonster
Copy link

DodoMonster commented Jan 9, 2019

What happens?

  • egg部署在线上环境,偶发性CPU居高不下,卡死无法正常访问到应用
  • 偶发情况非常不确定,但是可以确定不是访问并发量高引起的
  • 重启应用方可恢复正常

复现步骤,错误日志以及相关配置

  • pf-ae-mb-web.log.2019-01-01 应用访问日志
    2018-12-30 21:53:55,560 INFO 13657 [-/10.21.20.88/-/1354ms GET HTTP/200 9029 - 1353 - Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G36 Safari/601.1
    2019-01-01 13:53:31,699 INFO 6373 [-/10.21.20.88/-/210ms GET /home] [access] 116.21.94.93: - GET /home HTTP/200 25011 203 - Mozilla/5.0 (Linux; U; Android 8.0.0; zh-cn; MI 6 Build/OPR1.170623.027) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.128 Mobile Safari/537.36 XiaoMi/MiuiBrowser/10.4.5

  • 2019-01-01 13:53:31 这个时间段重启方有正常的访问日志进来,即2018-12-30 21:53:55~2019-01-01 13:53:31应用无法正常访问,访问页面出现504超时

  • 查日志追查到,以下错误信息:
    2018-12-30 20:53:20,831 ERROR 13645 nodejs.ClusterClientNoResponseError: client no response in 69985ms exceeding maxIdleTime 60000ms, maybe the connection is close on other side.
    at Timeout.Leader._heartbeatTimer.setInterval [as _onTimeout] (/node_modules/cluster-client/lib/leader.js:73:23)
    at ontimeout (timers.js:469:11)
    at tryOnTimeout (timers.js:304:5)
    at Timer.listOnTimeout (timers.js:264:5)
    name: 'ClusterClientNoResponseError'
    pid: 13645
    hostname: Nodejssa253

2018-12-30 21:54:40,937 ERROR 13645 nodejs.ClusterClientNoResponseError: client no response in 60022ms exceeding maxIdleTime 60000ms, maybe the connection is close on other side.
at Timeout.Leader._heartbeatTimer.setInterval [as _onTimeout] (/node_modules/cluster-client/lib/leader.js:73:23)
at ontimeout (timers.js:469:11)
at tryOnTimeout (timers.js:304:5)
at Timer.listOnTimeout (timers.js:264:5)
name: 'ClusterClientNoResponseError'
pid: 13645
hostname: Nodejssa253

  • 已尝试接入alinode,但接入后,阿里云控制后台莫名失去应用实例的显示与监控

相关环境信息

  • 操作系统
    Linux version 2.6.32-642.15.1.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-17)

  • Node 版本
    v8.5.0

  • Egg 版本
    "version": "1.13.1"

@whxaxes
Copy link
Member

whxaxes commented Jan 9, 2019

排查一下业务代码看一下有没有造成内存泄漏的逻辑,内存满了会引起 node 进行频繁 gc ,就会导致 cpu 飙升,很大概率是业务代码有问题导致的

@geekdada
Copy link
Member

geekdada commented Jan 9, 2019

如果容易重现可以在有问题的时候看一下 node 进程的内存和 CPU 占用是怎样的。另外你用什么方式接入 Alinode 的?

@DodoMonster
Copy link
Author

就是不容易重现啊。。。什么时候出现、出现的时机都是无法确定的

接入alinode,通过服务器那边去接入的,不是通过项目接入

@atian25
Copy link
Member

atian25 commented Jan 10, 2019

不复现的话我们也没办法跟进啊。

代码里面有没有 sync 之类的代码

@egg-bot
Copy link

egg-bot commented Jan 11, 2019

Hello @DodoMonster. Please provide a reproducible example following the instruction.

Issues labeled by Need Reproduce will be closed if no activities in 7 days.


@DodoMonster,请根据这个说明提供最小可复现代码。

如果在 7 天内没有进展会被自动关闭。

@hyj1991
Copy link
Member

hyj1991 commented Jan 11, 2019

接入 alinode 后,根据 快速设置告警规则 设置一下 CPU 报警阈值,比如默认是 单进程 CPU 使用超过 80% 的时候告警。

那么等你收到告警短信的时候,上 Node.js 性能平台的控制台,对目标 CPU 高的进程做一个 CPU Profile,然后观察 CPU 耗费在什么地方。

像这种 CPU 高的问题,单纯给代码是没有用的,如果有 CPU Profile 等信息,倒是可以看一下

@hyj1991
Copy link
Member

hyj1991 commented Jan 11, 2019

另外,看你描述是卡死,很可能有类似正则回溯引发的类死循环,因为 Node 是单工作 JS 主线程的运行模型,所以会阻塞住后续的用户访问,导致看起来好像是卡死的状态。

这个问题可以用性能平台提供的 诊断报告 功能进行确认,详细可以参考 死循环和正则攻击定位

@DodoMonster
Copy link
Author

sync

代码没有使用sync的

@DodoMonster
Copy link
Author

接入 alinode 后,发现alinode进程长时间CPU超100%,居高不下,但是应用能正常访问,这个又怎么解?
image

@hyj1991
Copy link
Member

hyj1991 commented Jan 14, 2019

你的是多核机器啊,单进程 CPU 超过 100% 有啥奇怪的,说明应用负载比较高,但是还没到机器 CPU 的极限呗

@hyj1991
Copy link
Member

hyj1991 commented Jan 14, 2019

排查进程为啥 CPU 高的方法上面已经写了,alinode 使用问题可以加钉钉群 11794270 私聊,没有其它问题这个 issue 先关闭了?

@atian25 atian25 closed this as completed Jan 14, 2019
@phper-chen
Copy link

你是在alinode看的cpu占用的对吧 数据库在本台服务器上没 如果在 不一定是egg的原因 可能是数据库索引不对把cpu资源耗尽了

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

No branches or pull requests

7 participants