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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线上redis服务内存异常分析。

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线上redis服务内存异常分析。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目中,新增了一個統計功能,用來統計不同手機型號的每天訪問pv,看了下redis2.6有個setbit的功能,于是打算嘗嘗鮮把

redis從2.4更新到了2.6

因為是租了vps。服務器的內存只有4g可以用,最近發現系統 負載很大。發現是redis服務引起的。

查了下redis的key db1 6w+。db1 不到2k。內存監控確有4.5g(這個很奇怪)。

?

這是很不正常的。想了最近在db1加了很多bit。于是把db1 flushdb。

發現內存占用一下就刷刷的降下來了。

查了不少關于reids bit的資料。剛開始還堅信可能是redis的一個bug。昨天晚上找了凌晨2點多。還是沒啥頭緒。很惱火。

今天仔細看了下redis的 setbit 命令。恍然大悟。我做了件多么傻b的事情。

setbit 命令

SETBIT key offset value

參數 offset? 的說明

offset 參數必須大于或等于 0 ,小于 2^32 (bit 映射被限制在 512 MB 之內)。

對使用大的 offset 的 SETBIT 操作來說,內存分配可能造成 Redis 服務器被阻塞。具體參考 SETRANGE 命令,warning(警告)部分。

?

然后在程序中查看我的offset設置。

因為是需要統計某個機型每天的pv。所有為了最大限度防止誤差,offset 格式是當前時間的HHmmssss

SimpleDateFormat msdf = new SimpleDateFormat("HHmmssss"); long offset = Long.valueOf(msdf.format(new Date()));//時分秒毫秒 redisClient.setBit(hkey,offset,true);

  算了下offset的最大值是23595999 最小值是0,平均值是11798000,也就是說。在二進制數據上在11798000位上置1

??? 然后又算了下

??? 11798000/8/1024/1024=1.4M

因為 db1 全是bit結構,差不多2k的樣子。這樣一共占用了1.4*2k=2.8g內存。

這就找出問題所在了。修改offset的大小即可。

?

?

?

?

?

?

?

?

?

轉載于:https://www.cnblogs.com/montya/p/3162114.html

總結

以上是生活随笔為你收集整理的线上redis服务内存异常分析。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。