Ticker 未释放导致的 CPU 占用过高
问题描述
2018-12-15, 辅导服务一台服务器的 TCP 连接数忽上忽下(如下图), 上下浮动在400~500的数量. 而此时 CPU 一直在满负载, 内存占用很高(如下图). 导致用户无法正常上课.
问题缘由
1. TCP 连接中, 存在全球各地的 IP, 并且数量占比很高, 存在恶意攻击的可能.
2. 辅导服务会为每个 TCP 连接都会创建一个 ticker, 并且没有释放. time.NewTicker() → time.startTimer() → runtime.addtimer() → runtime.addtimerLocked() → runtime.timerproc() → runtime.siftdownTimer().
每来一个 TCP 连接, ticker 会新增, timerproc 是唤醒处理定时器的一个函数. golang使用的最小堆维护的一个timer队列, go比较费时,每次操作最坏情况下都是logn(n为时间队列长度).
新建了很多 ticker, 资源未释放, 导致内存占用过高.
经验教训
Never call time.NewTicker(…) within a fast iterating for loop.
Stop the ticker to release associated resources.
参考资料:
https://zhuanlan.zhihu.com/p/30268582
https://guidao.github.io/go_timer.html
https://forum.golangbridge.org/t/runtime-siftdowntimer-consuming-60-of-the-cpu/3773
转载于:https://www.cnblogs.com/Zereker/p/11396639.html
Ticker 未释放导致的 CPU 占用过高相关推荐
- CPU占用较高及CPU占用不高但无响应问题排查小记
CPU占用不高但交易无响应排查 使用top -c 查看CPU使用情况 发现cpu占用不高,继续排查 使用jstack 应用进程号查看日志 发现ThreadA.ThreadB互相等待对方释放锁资源导致了 ...
- php进程导致服务器cpu占用100%问题追查过程
今天早上,zabbix服务器监控突然发出报警,提示CPU占用过高. 以下为追查原因的过程,做此记录,方便遇到同样问题的朋友进行排查 查看占用cpu高的进程 使用top命令找出cpu占用过高的进程,如图 ...
- Windows10 关于系统中断CPU占用过高导致电脑变卡的解决办法
Windows10 关于系统中断CPU占用过高导致电脑变卡的解决办法 最近一段时间笔记本一直很卡,不管打开几个程序,任务管理器中总会有CPU占用80%以上,这一度让我抓狂,开始网上搜教程,然后开始 ...
- XSSFWorkbook导致CPU占用很高
XSSFWorkbook导致CPU占用很高 将微信支付的账单同步至云存储 业务需求 科普 解决方案 将微信支付的账单同步至云存储 业务需求 https://pay.weixin.qq.com/wiki ...
- 解决Ubuntu14.04下使用foxit reader(福昕阅读器)导致CPU占用过高的问题
不管福昕阅读器安装在Windows下还是Linux下都有发生过CPU占用过高的问题,国内外的网友都反映是因为福昕云插件导致的,所以Windows下就很好解决了,直接 控制面板 -> 程序 然后删 ...
- 记一次批量插入导致cpu占用过高问题
一.业务场景 报表系统,获取公司各个地区的业务单子结算数据,计算分配佣金和业绩,并生成excel表格,共三个excel,两个excel中有十个sheet,一个有四个sheet,包括所有明细数据及分类汇 ...
- jprofiler分析dump文件_内存溢出+CPU占用过高:问题排查+解决方案+复盘(超详细分析教程)...
点击上方 "Java指南者"关注, 星标或置顶一起成长 免费送 1024GB 精品学习资源 来源:https://zhanghan.blog.csdn.net/article/de ...
- 内存溢出+CPU占用过高:问题排查+解决方案+复盘(超详细分析教程)
前言 最近刚上线了一款社交项目,运行十多天后(运营持续每天推量),发现问题: 系统OOM(资源不能被释放)导致服务器频繁且长时间FGC导致服务器CPU持续飚高 日志中内存溢出:java.lang.Ou ...
- kswapd0 进程CPU占用过高
前几天遇到的一个问题,自己本地用VM配置的虚拟机,一般会top查看进程以及CPU占用的一些情况.又一次用laravel 打印对象,里面的内容比较多,浏览器当时就卡了. 然后看进程的情况.我以为会是ng ...
最新文章
- 单片机中存储器扩展位地址线怎么算_小白学单片机 :AT89S51单片机基本硬件结构认识(2)...
- python正态分布相关函数
- Java多线程干货系列—(一)Java多线程基础
- linux make 命令简介
- 如何查看 JSP 和 Servlet 的版本
- Apache JMeter 压测webservice接口
- 游戏开发之C++类中的static、const梳理总结(C++基础)
- Ajax的回调函数(js与JQuery写法)
- easyUI的iconCls
- 使用POI为Excel添加数据有效性验证
- 怎么把dicom数据转成nifty数据
- ios sdk 穿山甲_iOS 穿山甲广告 SDK 的使用
- 如何实现罗克韦尔PLC的模拟量采集和远程上下载?
- 湖北省2022年高企申报奖励补贴以及申报材料流程讲解(认定条件要求内容)
- 阿里云服务器续费流程方法(图文详解)
- my ReadTravel_ Choson / Tailand Racha Island / Phuket Island / Malaysia
- 实战踩坑---MFC---CreateEvent
- unity2D:音效Audio音效管理SoundManager
- mysql语句知识点_mysql知识点简单总结
- IECQ QC 080000介绍及与ISO9001、IATF16949体系的区别