日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ticker 未释放导致的 CPU 占用过高

發(fā)布時(shí)間:2025/6/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ticker 未释放导致的 CPU 占用过高 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問題描述

2018-12-15, 輔導(dǎo)服務(wù)一臺服務(wù)器的 TCP 連接數(shù)忽上忽下(如下圖), 上下浮動(dòng)在400~500的數(shù)量. 而此時(shí) CPU 一直在滿負(fù)載,?內(nèi)存占用很高(如下圖). 導(dǎo)致用戶無法正常上課.

問題緣由

1. TCP 連接中, 存在全球各地的 IP, 并且數(shù)量占比很高, 存在惡意攻擊的可能.

2. 輔導(dǎo)服務(wù)會為每個(gè) TCP 連接都會創(chuàng)建一個(gè) ticker, 并且沒有釋放. time.NewTicker()?→ time.startTimer() → runtime.addtimer() →?runtime.addtimerLocked()?→ runtime.timerproc()?→ runtime.siftdownTimer().

? ? 每來一個(gè) TCP 連接, ticker 會新增,?timerproc 是喚醒處理定時(shí)器的一個(gè)函數(shù).?golang使用的最小堆維護(hù)的一個(gè)timer隊(duì)列,?go比較費(fèi)時(shí),每次操作最壞情況下都是logn(n為時(shí)間隊(duì)列長度).

? ? 新建了很多 ticker, 資源未釋放, 導(dǎo)致內(nèi)存占用過高.

經(jīng)驗(yàn)教訓(xùn)

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

轉(zhuǎn)載于:https://www.cnblogs.com/Zereker/p/11396639.html

總結(jié)

以上是生活随笔為你收集整理的Ticker 未释放导致的 CPU 占用过高的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。