项目中,新增了一个统计功能,用来统计不同手机型号的每天访问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服务内存异常分析。相关推荐

  1. 一次线上Redis类转换异常排查引发的思考

    之前同事反馈说线上遇到Redis反序列化异常问题,异常如下: XxxClass1 cannot be cast to XxxClass2 已知信息如下: 该异常不是必现的,偶尔才会出现: 出现该异常后 ...

  2. 内存泄漏java例子_一次线上Java应用内存泄漏分析实例

    由于JVM的内存管理采用GC垃圾自动回收机制,这使得Java程序员在编程的时候确实可以从内存管理中释放出来,但这也引发了另外一个大问题,一旦Java应用出现内存泄漏的时候,常常让人措手不及,陷入无从下 ...

  3. java 内存泄漏样例_一次线上Java应用内存泄漏分析实例

    由于JVM的内存管理采用GC垃圾自动回收机制,这使得Java程序员在编程的时候确实可以从内存管理中释放出来,但这也引发了另外一个大问题,一旦Java应用出现内存泄漏的时候,常常让人措手不及,陷入无从下 ...

  4. php tp 重加载页面,thinkPHP线上自动加载异常与修复方法实例分析

    本文实例讲述了thinkPHP线上自动加载异常与修复方法.分享给大家供大家参考,具体如下: 项目遇到一个奇怪的问题,本地代码正常,服务器上却不正常. 经过测试,应该是自动加载出了问题,尝试了各种方法, ...

  5. 中国线上驾驶游戏市场深度研究分析报告

    [报告篇幅]:109 [报告图表数]:142 [报告出版时间]:2021年12月 报告摘要 2020年中国线上驾驶游戏市场规模达到了  亿元,预计2027年将达到  亿元,未来几年年复合增长率(CAG ...

  6. 质量基础设施NQI“一站式”线上公共服务平台建设方案

    质量基础设施NQI"一站式"线上公共服务平台建设方案 质量基础设施NQI"一站式"线上公共服务平台,本着"基础业务在线办结,要素资源高效协同,特色服务 ...

  7. Java 线上cpu占用过高分析

    转载于:https://blog.csdn.net/ch999999999999999999/article/details/113151519 感谢作者:ch999999999999999999 J ...

  8. mysql内存爆_线上MySQL机器内存爆掉原因分析与解决

    现象: 阿里金融某业务的MySQL机器的内存每隔几天就会增长,涨上去后,却不下来.累积后内存爆掉. 分析: 此业务是间隔的对MySQL有大访问,其它时间几乎无访问.排查发现,内存涨时,一般会有MySQ ...

  9. 线上redis一般安在linux_Redis企业级应用-Linux安装搭建一个完整的linxu线上服务(上)...

    我们在做项目的时候经常会遇到很多性能的问题,也成为整个系统优化最疼痛的问题,主要还是因为在用户量大的时候或者就是说高并发访问的时候,我们系统的数据库会有一个限制.当然也可以通过对数据库的优化对系统进行 ...

最新文章

  1. 第二周项目2-就拿胖子说事
  2. 计算机网络第五章:运输层
  3. Linux 使用本地yum源及软件包管理
  4. apache php隐藏头信息的方法,科技常识:nginx/apache/php隐藏http头部版本信息的实现方法...
  5. java实现人脸识别源码【含测试效果图】——DaoImpl层(UserDaoImpl)
  6. python变量的创建过程(内存地址变化)
  7. Maven依赖的Scope去除部署不需要的jar 包(打包)
  8. 【python简洁之道】-----1. 注释规则
  9. 查询各分类中最大自增ID
  10. opencv ret, binary = cv2.threshold(src, 180, 255, )二值化的类型
  11. turbo c语言编程环境,turbo c(编程软件)
  12. 【观察】SAP HANA+英特尔傲腾:珠联璧合,所向披靡
  13. 华为手机USB调试搜不到设备
  14. SpringBoot在thymeleaf模板引擎下集成layDate日期插件
  15. cad.net 利用win32api实现不重复打开dwg路径的文件夹(资源管理器)
  16. 什么是期货、现货?//2021-2-1
  17. java for 代表什么意思_java中的for是什么意思
  18. Navicat Premium 12.0.22安装与激活
  19. Elasticsearch:Runtime fields 及其应用(一)
  20. 场景构图你知道多少?

热门文章

  1. 【Android Studio安装部署系列】十一、Android studio获取数字签名信息
  2. P1330 封锁阳光大学
  3. Java中的数据类型及相互转换方法
  4. 微软职位内部推荐-SDEII_ ECO
  5. SCCM 2012 R2 从入门到精通 Part2 部署准备
  6. 如何从新开发的程序中提炼服务
  7. Python计算防蓝光眼镜加权阻隔率
  8. .process和ProcessFunction(没有整理完)
  9. Types cannot be provided in put mapping requests, unless the include_type_name parameter is set to t
  10. superset配置与初步使用