counter服务报警问题分析解决

counter服务介绍:
    我们sae这边counter服务给用户提供的功能为计数器服务,使用的软件为redis。而我们对counter服务的监控,是通过monitor来做的,主要操作就是set,get,delete,increase,create,remove等操作。而counter报警问题,之前也存在,大概两三天会有一次报警。

报警问题主要分为如下两个阶段:

一,某天counter服务频繁报警:
    是因为之前monitor的counter监控只监控了com组webruntime,
把ent,bigapp加进去之后,频繁报警。这是因为ent,bigapp组sae-php-saecounter软件包版本比较低,
而低版本的包代码中没有添加执行redis操作失败的重试机制。软件版本统一之后,每天counter的报警大概在十几条左右。
    注:ent,bigapp组counter没升级的原因为新counter的软件包一直在com组做灰度

二,counter服务每天十几条的报警:
通过分析报警内容,redis的 aof文件,monitor报警逻辑及分析tcpdump抓的数据包发现一些问题,具体如下:
    1,报警内容都是create和remove的时候没有成功,其它的set,get,increase操作没问题。
   
2,create和remove一个key的时候,是一个事物操作。但是,在aof文件中看涉及对两个key的操作。和服务负责人确认,是代码逻辑添加的。涉及到的一个key是hash表中客户端要操作的key本身,另一个key是记录此hash表的key数量(ent或com或
bigapp组每组的counter的monitor会共用一个key)
    3,在抓包中看到,报警的ent webruntime机器在执行一个remove key事物操作前,已经被redis
watch的key(这个key为此hash表的key数量,watch操作也是在代码中的)被另一台ent
webruntime给修改了(因为monitor报警是并发的,故对redis的操作在一段时间内,不一定只有一台机器执行),导致remove或者
create的时候,redis发现被watch的key修改了,故停止执行此事物操作,重试5次没有成功,故导致monitor报警

解决办法:
    1,适当增大redis命令执行失败后的delay时间和重试次数,这样当事务执行失败后,会在延迟后继续重试执行,一定程度降低失败率
    2,修改counter代码逻辑,可以通过hlen命令获得hash表的长度。可以解决这个问题

最终我们才用第二种方法解决了这个问题。

时间: 2024-08-02 02:49:46

counter服务报警问题分析解决的相关文章

DICOM:fo-dicom之C-STORE再分析‘解决System.ObjectDisposedException异常’

背景: 在我的[DICOM系列专栏]中希望尽量涵盖关于DICOM协议的所有知识,但是在具体到某个知识点的讲解时往往会穿插使用DICOM协议的多种开源实现,例如基于C++的dcmtk.基于C#的fo-dicom.甚至是最近更加入的基于Java的dcm4che.之所以穿插介绍多种开源实现,简单概括其用意有三,第一,开源实现各有利弊,为了方便大家自己动手练习,第一时间会选择对该知识点实现最简单的开源库:第二,开源库的实现过程中应用到了许多编码和工程的设计理念,直接查看源码有时候会看起来与DICOM协议

只需4个步骤,分析解决在生产环境下JVM内存泄露问题

作者:未完成交响曲 发现异常 首先通过我们内部搭建的日志平台发现我们线上环境一个java应用有大量的http接口请求超时,登录linux服务器查看网络环境没有问题,判断是应用自身运行异常,重启应用后发现异常还在,开始查找问题. 初步查找问题 通过指令:jstat -gcutil 查看jvm内存占用和gc情况: 发现老年代内存占用比例过高,并且每次fullGC后并没有有效回收.老年代内存占用百分比变化趋势大致如下: 初步判断大量请求超时和服务瘫痪的直接原因:每次fullGC后的内存占用越来越高内存

微服务全流程分析

转眼已经2020,距离微服务这个词落地已经过去好多年!(我记得2017年就听过这个词).然而今天我想想什么是微服务,其实并没有一个很好的定义.为什么这样说,按照微服务的定义: 微服务架构就是将一个庞大的业务系统按照业务模块拆分成若干个独立的子系统,每个子系统都是一个独立的应用,它是一种将应用构建成一系列按业务领域划分模块的,小的自治服务的软件架构方式,倡导将复杂的单体应用拆分成若干个功能单一.松偶合的服务,这样可以降低开发难度.增强扩展性.便于敏捷开发,及持续集成与交付活动. 根据这个定义,不难

【原创】通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...

这篇blog重点在解决问题,如果你对字符编码并不是特别了解,建议先看看 < [原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 >. 当然,如果只是针对解决这个Mysql插入报错问题,本篇足够了. 一.定位错误 定位错误绝对是至关重要的一环.我建议遇到问题耐心分析一下比较好,毕竟“不是所有的牛奶都叫特仑苏”. 引起同一个问题的可能有很多,别人的解决方案也许并不适合自己. 那先看看问题出现在哪了,报错如下: 发现的确是编码错误, 16进制的错误提示(\xF0\x9F\x94\xA5\x

通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: &#39;\xF0...

原文:[原创]通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 'incorrect string value: '\xF0... 这篇blog重点在解决问题,如果你对字符编码并不是特别了解,建议先看看 < [原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 >. 当然,如果只是针对解决这个Mysql插入报错问题,本篇足够了. 一.定位错误 定位错误绝对是至关重要的一环.我建议遇到问题耐心分析一下比较好,毕竟“不是所有的牛奶都叫特仑苏”. 引起同一个问

vs自动生成的WebService配置文件在部署到IIs6后,服务调用失败的解决方法

近日,在项目中需要引用java发布的WebService,添加服务引用后,调用一切正常. 配置如下: <system.serviceModel> <bindings> <basicHttpBinding> <binding name="SecurityServiceImplServiceSoapBinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize=&qu

activitymanagerservice服务源码分析

activitymanagerservice服务源码分析 1.ActivityManagerService概述 ActivityManagerService(以下简称AMS)作为android中最核心的服务,主要负责系统的四大组件的启动.切换.调度以及应用进程的管理和调度等工作.它类似于操作系统中的进程管理和调度模块类似,所以要想掌握android,AMS至关重要.AMS属于service的一种,所以它也是由system_server进行启动以及管理.本文将以两条不同的主线来分析AMS:第一条与

阿里云CentOS 7.2 MySQL服务启动失败的解决思路

阿里云 CentOS 7.2 MySQL服务启动失败的解决思路 前言 : 昨天刚刚搭建好的MySQL让老大看了一下,经过测试已经完成任务.但是今天早晨来的时候发现服务器被关了,此时我的心情崩溃的,但是我非常冷静的解决了MySQL问题.如下: 启动MySQL服务器失败,如下所示: [[email protected] ~]# /etc/init.d/mysqld start Starting mysqld (via systemctl):  Job for mysqld.service faile

微服务架构下,解决数据一致性问题的实践

随着业务的快速发展,应用单体架构暴露出代码可维护性差.容错率低.测试难度大和敏捷交付能力差等诸多问题,微服务应运而生.微服务的诞生一方面解决了上述问题,但是另一方面却引入新的问题,其中主要问题之一就是:如何保证微服务间的业务数据一致性.本文将通过一个商品采购的业务,来看看在Dubbo的微服务架构下,如何通过Fescar来保障业务的数据一致性.本文所述的例子中,Dubbo 和 Fescar 的注册配置服务中心均使用 Nacos.Fescar 0.2.1+ 开始支持 Nacos 注册配置服务中心.业