问题描述

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 占用过高相关推荐

  1. CPU占用较高及CPU占用不高但无响应问题排查小记

    CPU占用不高但交易无响应排查 使用top -c 查看CPU使用情况 发现cpu占用不高,继续排查 使用jstack 应用进程号查看日志 发现ThreadA.ThreadB互相等待对方释放锁资源导致了 ...

  2. php进程导致服务器cpu占用100%问题追查过程

    今天早上,zabbix服务器监控突然发出报警,提示CPU占用过高. 以下为追查原因的过程,做此记录,方便遇到同样问题的朋友进行排查 查看占用cpu高的进程 使用top命令找出cpu占用过高的进程,如图 ...

  3. Windows10 关于系统中断CPU占用过高导致电脑变卡的解决办法

    Windows10 关于系统中断CPU占用过高导致电脑变卡的解决办法   最近一段时间笔记本一直很卡,不管打开几个程序,任务管理器中总会有CPU占用80%以上,这一度让我抓狂,开始网上搜教程,然后开始 ...

  4. XSSFWorkbook导致CPU占用很高

    XSSFWorkbook导致CPU占用很高 将微信支付的账单同步至云存储 业务需求 科普 解决方案 将微信支付的账单同步至云存储 业务需求 https://pay.weixin.qq.com/wiki ...

  5. 解决Ubuntu14.04下使用foxit reader(福昕阅读器)导致CPU占用过高的问题

    不管福昕阅读器安装在Windows下还是Linux下都有发生过CPU占用过高的问题,国内外的网友都反映是因为福昕云插件导致的,所以Windows下就很好解决了,直接 控制面板 -> 程序 然后删 ...

  6. 记一次批量插入导致cpu占用过高问题

    一.业务场景 报表系统,获取公司各个地区的业务单子结算数据,计算分配佣金和业绩,并生成excel表格,共三个excel,两个excel中有十个sheet,一个有四个sheet,包括所有明细数据及分类汇 ...

  7. jprofiler分析dump文件_内存溢出+CPU占用过高:问题排查+解决方案+复盘(超详细分析教程)...

    点击上方 "Java指南者"关注, 星标或置顶一起成长 免费送 1024GB 精品学习资源 来源:https://zhanghan.blog.csdn.net/article/de ...

  8. 内存溢出+CPU占用过高:问题排查+解决方案+复盘(超详细分析教程)

    前言 最近刚上线了一款社交项目,运行十多天后(运营持续每天推量),发现问题: 系统OOM(资源不能被释放)导致服务器频繁且长时间FGC导致服务器CPU持续飚高 日志中内存溢出:java.lang.Ou ...

  9. kswapd0 进程CPU占用过高

    前几天遇到的一个问题,自己本地用VM配置的虚拟机,一般会top查看进程以及CPU占用的一些情况.又一次用laravel 打印对象,里面的内容比较多,浏览器当时就卡了. 然后看进程的情况.我以为会是ng ...

最新文章

  1. 单片机中存储器扩展位地址线怎么算_小白学单片机 :AT89S51单片机基本硬件结构认识(2)...
  2. python正态分布相关函数
  3. Java多线程干货系列—(一)Java多线程基础
  4. linux make 命令简介
  5. 如何查看 JSP 和 Servlet 的版本
  6. Apache JMeter 压测webservice接口
  7. 游戏开发之C++类中的static、const梳理总结(C++基础)
  8. Ajax的回调函数(js与JQuery写法)
  9. easyUI的iconCls
  10. 使用POI为Excel添加数据有效性验证
  11. 怎么把dicom数据转成nifty数据
  12. ios sdk 穿山甲_iOS 穿山甲广告 SDK 的使用
  13. 如何实现罗克韦尔PLC的模拟量采集和远程上下载?
  14. 湖北省2022年高企申报奖励补贴以及申报材料流程讲解(认定条件要求内容)
  15. 阿里云服务器续费流程方法(图文详解)
  16. my ReadTravel_ Choson / Tailand Racha Island / Phuket Island / Malaysia
  17. 实战踩坑---MFC---CreateEvent
  18. unity2D:音效Audio音效管理SoundManager
  19. mysql语句知识点_mysql知识点简单总结
  20. IECQ QC 080000介绍及与ISO9001、IATF16949体系的区别

热门文章

  1. Redis搭建(二):主从复制
  2. PHP统计网站pv(访问量)
  3. Dell服务器相关操作
  4. 在linux下安装配置DNS服务器
  5. NLP - Log-linear Models
  6. 使用 $.grep() 方法
  7. 在SharePoint 2010中通过SQL数据源创建仪表板
  8. 【收集】EJB3.0的各应用服务器提供的JNDI接口
  9. .NET设计模式系列文章
  10. 「学习笔记」多项式相关