为什么要注入问题代码?

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. [转]windows 软链接的建立及删除

    [转]windows 软链接的建立及删除 http://blog.chinaunix.net/uid-74941-id-3764093.html 1.建立举例 ##建立d:develop链接目录,指向 ...

  2. [转]ubuntu(12.04)下, 命令 ,内核 源代码的获取

    [转]ubuntu(12.04)下, 命令 ,内核 源代码的获取 http://blog.chinaunix.net/uid-18905703-id-3446099.html 1.命令:例如:要查看l ...

  3. web安全之token

    Token,就是令牌,最大的特点就是随机性,不可预测.一般黑客或软件无法猜测出来. 那么,Token有什么作用?又是什么原理呢? Token一般用在两个地方: 1)防止表单重复提交. 2)anti c ...

  4. WPF——数据绑定(一)什么是数据绑定

    注意:本人初学WPF,文中可能有表达或者技术性问题,欢迎指正!谢谢! 一:什么是数据绑定? “Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简 ...

  5. ORA-12154:TNS:无法解析指定的连接标识符

    ORA-12154:TNS:无法解析指定的连接标识符 1问题的描述 Oracle11g server 64bit服务器端安装在Windows Server2008 Enterprise上,安装Orac ...

  6. Word图片版式设置问题

    word里面插入图片,版式设置为嵌入式,又显示不完整:设置上下,图片又跑到页面上方空白处.无论怎么设置,都不满意. 以为是word的问题,后来网络搜索才发现,如果段落行距为固定值的话,图片改为嵌入型后 ...

  7. printf的一个常用技巧

    acm 的题目经常要求输出最后面一位不能有空格: 用if语句显得代码难看: 实现如下: int a[5]={1,2,3,4,5}; for(int i=0;i<=4;i++) printf(&q ...

  8. log4j.xml配置文件

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration S ...

  9. JS--传统事件模型的问题

    事件绑定分为两种情况:传统的事件绑定(内联模型.脚本模型),一种是现代事件绑定模型(DOM2级事件绑定). 内联模型的事件绑定是将事件写在元素标签中,将事件绑定函数当做元素的一种属性来实现的,这种绑定 ...

  10. poj 1273 Drainage Ditches 最大流入门题

    题目链接:http://poj.org/problem?id=1273 Every time it rains on Farmer John's fields, a pond forms over B ...