为什么要注入问题代码?
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用于制造缓慢请求
4.2.error response用于制造报错信息
4.3.memeroy use内存使用情况
4.4. use cpu使用情况
4.5. 触发慢sql
4.6.触发timeout sql
如何添加新的问题代码?
在AcmeAir common 模块中有一个com.acmeair.problems包,其中包含了CPU问题,内存问题以及慢事务问题的注入代码。
如果要添加新的问题代码,需要继承ProblemInterceptorSupport类,实现了ProblemInterceptor接口,并通过分析 HttpRequest Header中的issue-header 决定是否执行问题代码。
如何向AcmeAir注入问题代码的更多相关文章
-
php防sql注入过滤代码
防止sql注入的函数,过滤掉那些非法的字符,提高sql安全性,同时也可以过滤XSS的攻击. function filter($str) { if (empty($str)) return false; ...
-
php防止sql注入漏洞代码 &;&; 几种常见攻击的正则表达式
注入漏洞代码和分析 ...
-
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版本,是一个典型的“二 ...
-
调试LD_PRELOAD注入的代码
LD_PRELOAD提供了平民化的注入方式固然方便,同一时候也有不便:注入库出错后调试比較困难. 我琢磨了几天找到了可行的调试方法,当然未必是最有效的办法.抛出陋文,希望引来美玉~ 首先.写一段代码作 ...
-
Spring4 -03 -Dependency Injection (依赖注入) : 代码体现/配置xml/测试
DI:中文名称:依赖注入 英文名称((Dependency Injection) DI 是什么? 3.1 DI 和IoC 是一样的,差不多一样的技术和模板! 3.2 当一个类(A)中需要依赖另一个类( ...
-
不修改源代码,动态注入Java代码的方法(转)
转自:https://blog.csdn.net/hiphoon_sun/article/details/38707927 有时,我们需要在不修改源代码的前提下往一个第三方的JAVA程序里注入自己的代 ...
-
代码注入——c++代码注入
代码注入之——c++代码注入 0x00 代码注入和DLL注入的区别 DLL注入后DLL会通过线程常驻在某个process中,而代码注入完成之后立即消失. 代码注入体积小,不占内存 0x01 通过c ...
-
dll注入与代码注入
学习<逆向工程核心原理>,在x64下dll注入与代码注入. dll注入主要用到CreateRemoteThread, HANDLE WINAPI CreateRemoteThread( _ ...
-
注入攻击-SQL注入和代码注入
注入攻击 OWASP将注入攻击和跨站脚本攻击(XSS)列入网络应用程序十大常见安全风险.实际上,它们会一起出现,因为 XSS 攻击依赖于注入攻击的成功.虽然这是最明显的组合关系,但是注入攻击带来的不仅 ...
随机推荐
-
4.了解AngularJS模块和依赖注入
1.模块和依赖注入概述 1.了解模块 AngularJS模块是一种容器,把代码隔离并组织成简洁,整齐,可复用的块. 模块本身不提供直接的功能:包含其他提供功能的对象的实例:控制器,过滤器,服务,动画 ...
-
HDU 4031 Attack(离线+线段树)(The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4031 Problem Description Today is the 10th Annual of ...
-
sublime相关设置
1.设置Sublime Text新标签页打开文件 "open_files_in_new_window": false,
-
Java:网络编程
一.因特网地址 InetAddress类:实现主机名和因特网地址之间的转换. InetAddress address=InetAddress.getByName(String);返回一个InetAdd ...
-
devexpress控件layoutview特效之一旋转木马的实现
1.devexpress有很多很好的特效,最近做了个旋转木马的特效,给大家分享下.效果图如下: 2.这里的控件为gridcontrol,里面的view为layoutview.数据绑定的代码与其他gri ...
-
JEECG3.8 全套实战视频全部开放,免费下载!
JEECG快速开发平台V3.8版本自去年10月份发布以来,下载使用数屡创新高,并受到众多开发者积极反馈.为帮助更多初学者能够快速上手,JEECG V3.8版本实战教程现已全面开放,免费下载!本教程深入 ...
-
linux学习笔记整理(七)
第八章 Centos7软件包的管理与安装本节所讲内容:8.1 使用rpm命令-安装-查看-卸载-rpm软件包8.2 yum管理软件包8.3 实战tar源码包管理-srpm源码包安装方法 8.1 软件包 ...
-
Python学习---Python环境变量安装问题0907
问题背景: 重新安装操作系统后,原来的环境变量丢失[因Python3.5安装目录是E盘,文件还在,只是丢失了环境变量而已,添加即可] 问题解决: 方法一:使用cmd命令添加path环境变量 在cmd下 ...
-
用 python 抓取知乎指定回答下的视频
前言 现在知乎允许上传视频,奈何不能下载视频,好气哦,无奈之下研究一下了,然后撸了代码,方便下载视频保存. 接下来以 猫为什么一点也不怕蛇? 回答为例,分享一下整个下载过程. 调试一下 打开 F12, ...
-
COOKIE的优化与购物车小试
由于经常被抓取文章内容,在此附上博客文章网址:,偶尔会更新某些出错的数据或文字,建议到我博客地址 : --> 点击这里 一 Cookie 的优化 1.1 一般而言,我们设置cookie是在ph ...