zoukankan      html  css  js  c++  java
  • 如何向AcmeAir注入问题代码

    为什么要注入问题代码?

    AcmeAir的常规代码是为了压测测试准备的,所以绝大部分的操作都是可以在几十毫秒中就可以正常返回的。为了向用户展示我们APM工具可以在源代码级别发现系统潜在问题,我们需要在AcmeAir中动态注入问题代码。 当某些请求满足了问题代码的触发条件的适合,问题代码就会被运行起来。

    问题代码是如何被触发起来的?

    AcmeAir WebApp是一个常规的Web应用,我们可以通过设置Filter的方式监控所有的Rest API的情况,通过分析Request中的头信息来动态决定是否触发问题代码。

    目前支持的问题有 CPU问题,内存问题,还有慢事务问题。

    问题类型
    header name
    header value
    CPU issue-header cpu-issue
    Memory issue-header memory-issue
    SlowTransaction issue-header slow-transaction-issue

    如果要触发这些问题, 我们只需要在对应的HTTP请求头中设置对应的header信息即可

    1.以crul 为例

    这里可以触发cpu-issue,slow-transaction-issue这两个issues

    curl --header "issue-header: cpu-issue,slow-transaction-issue" www.google.com

    2.以jmeter为例

    这里可以触发slow-transaction-issue,当然还可以在别的请求处添加相同或不同的issue

    sleepTime代表缓慢事务延迟时间(秒)

    3. 触发memory leak,header设置如下

          issue-header : memory-issue

          leakType : staticSet/database (staticSet静态集合引起、database数据库连接相关对象引起)

          leakSpeed : verySlow//slow/normal/fast (泄露时间分别约3h/1h/15min/5min引起OOM  ,有不同程度误差)

    例如:下图配置表示以数据库连接相关对象引起的慢内存泄露,至OOM大约1个小时

    4. 通过前端页面触发问题

    为了方便快速、直观地注入问题,我们发布了前端界面触发问题的版本,只要pull最新镜像即可使用。使用方式如下参考:

    (可以根据需求,参考推荐配置做调整):

    4.1.slow transaction用于制造缓慢请求

       每个请求时延5秒,表示请求响应时间5秒左右

    4.2.error response用于制造报错信息

      返回的是500错误

    4.3.memeroy use内存使用情况

    配置:每秒1个请求,持续1000秒(根据实验长度自行设置),每个请求时延15秒,每个请求占用30M内存,会造成memroy/heap/used在250左右,
    完成后可以,停止请求,使用 jcmd $pid GC.run命令进行强制内存回送,迅速减低内存。

    4.4. use cpu使用情况

    配置:每秒1000个请求,持续150秒,每个请求做10000000单位次运算,会造成CPU使用率 在 8%左右

    4.5. 触发慢sql

    每个请求的sql查询7秒左右

    4.6.触发timeout sql

    每个请求查询sql的事务 timeout ,导致返回500

    如何添加新的问题代码?

    在AcmeAir common 模块中有一个com.acmeair.problems包,其中包含了CPU问题,内存问题以及慢事务问题的注入代码。

    如果要添加新的问题代码,需要继承ProblemInterceptorSupport类,实现了ProblemInterceptor接口,并通过分析 HttpRequest Header中的issue-header 决定是否执行问题代码。

  • 相关阅读:
    [原创]快速排序(C++版)
    连接mysql8.0时报错的问题
    关于idea无法使用搜狗输入法打出汉字的解决方案(转)
    bootStrap select组件相关问题
    idea 项目可以运行但是jsp中url报红的问题
    idea 项目启动找不到页面问题和run/debug只能启动一个的问题
    form序列化到后台中文乱码
    在js中获取bootStrap table 的属性
    三元运算符,多条件时判断
    Spring获取日期时间差8小时问题解决
  • 原文地址:https://www.cnblogs.com/beautiful-code/p/5997228.html
Copyright © 2011-2022 走看看