为什么要注入问题代码?

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 决定是否执行问题代码。

如何向AcmeAir注入问题代码的更多相关文章

  1. php防sql注入过滤代码

    防止sql注入的函数,过滤掉那些非法的字符,提高sql安全性,同时也可以过滤XSS的攻击. function filter($str) { if (empty($str)) return false; ...

  2. php防止sql注入漏洞代码 && 几种常见攻击的正则表达式

    注入漏洞代码和分析                                                                                           ...

  3. 20.Ecshop 2.x/3.x SQL注入/任意代码执行漏洞

    Ecshop 2.x/3.x SQL注入/任意代码执行漏洞 影响版本: Ecshop 2.x Ecshop 3.x-3.6.0 漏洞分析: 该漏洞影响ECShop 2.x和3.x版本,是一个典型的“二 ...

  4. 调试LD_PRELOAD注入的代码

    LD_PRELOAD提供了平民化的注入方式固然方便,同一时候也有不便:注入库出错后调试比較困难. 我琢磨了几天找到了可行的调试方法,当然未必是最有效的办法.抛出陋文,希望引来美玉~ 首先.写一段代码作 ...

  5. Spring4 -03 -Dependency Injection (依赖注入) : 代码体现/配置xml/测试

    DI:中文名称:依赖注入 英文名称((Dependency Injection) DI 是什么? 3.1 DI 和IoC 是一样的,差不多一样的技术和模板! 3.2 当一个类(A)中需要依赖另一个类( ...

  6. 不修改源代码,动态注入Java代码的方法(转)

    转自:https://blog.csdn.net/hiphoon_sun/article/details/38707927 有时,我们需要在不修改源代码的前提下往一个第三方的JAVA程序里注入自己的代 ...

  7. 代码注入——c++代码注入

    代码注入之——c++代码注入 0x00  代码注入和DLL注入的区别 DLL注入后DLL会通过线程常驻在某个process中,而代码注入完成之后立即消失. 代码注入体积小,不占内存 0x01  通过c ...

  8. dll注入与代码注入

    学习<逆向工程核心原理>,在x64下dll注入与代码注入. dll注入主要用到CreateRemoteThread, HANDLE WINAPI CreateRemoteThread( _ ...

  9. 注入攻击-SQL注入和代码注入

    注入攻击 OWASP将注入攻击和跨站脚本攻击(XSS)列入网络应用程序十大常见安全风险.实际上,它们会一起出现,因为 XSS 攻击依赖于注入攻击的成功.虽然这是最明显的组合关系,但是注入攻击带来的不仅 ...

随机推荐

  1. qt 焦点设置策略

    focusPolicy 一个QWidget获得焦点的方式受 focusPolicy 控制 Qt::TabFocus 通过Tab键获得焦点 Qt::ClickFocus 通过被单击获得焦点 Qt::St ...

  2. 自定义debug信息

    #ifdef  DEBUG  #define debug(fmt,args...)  printk(fmt ,##args)  #define debugX(level,fmt,args...) if ...

  3. < java.lang >-- StringBuilder字符串缓冲区

    JDK1.5出现StringBuiler:构造一个其中不带字符的字符串生成器,初始容量为 16 个字符.该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候( ...

  4. C++中的static关键字(转)

    原出处:http://blog.csdn.net/hackbuteer1/article/details/7487694 C++的static有两种用法:面向过程程序设计中的static和面向对象程序 ...

  5. PSP0表格

    一 项目计划日志 周活动总结表 姓名:陆宇                                                                         日期:3.1 ...

  6. python解析xml之lxml

    虽然python解析xml的库很多,但是,由于lxml在底层是用C语言实现的,所以lxml在速度上有明显优势.除了速度上的优势,lxml在使用方面,易用性也非常好.这里将以下面的xml数据为例,介绍l ...

  7. 【Path Sum II】cpp

    题目: Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the give ...

  8. 基于ArcEngine的空间数据通用建库软件介绍

    最近花了点时间把之前的空间数据入库功能进行了完善,在这里做一个简单的介绍,也希望大家给提点意见和建议,我的目标是做一个好用.易用.通用.稳定的入库程序. 1.软件特点: 基于模板(方案)的数据更新   ...

  9. Json Serialize 忽略特定属性

    Json Serialize 忽略特定属性 Json Serialize SerializeFilter 忽略特定属性 key words:Json Serialize jackson fastjso ...

  10. shader 的 nounroll

    刚刚解决了一个特别坑的问题. 客户有个需求 需要shader里面 loop 的iterator数量 在运行时确定.z 这样对于里面存在  sample的loop就会被force unroll但因为co ...