java 监控 m_Java接口响应超时监控
为什么要监控
服务化接口是提供服务的,接口正确性、稳定性是最最重要的,在保证正确的同时需要尽量提高接口响应时间。
有的团队会有专门的工具来对系统响应时间、吞吐量做监控,但如果团队没有这种“待遇”就需要自己来做一些工具为自己的代码提供服务。
自己动手,丰衣足食
AOP + Annotation 简陋实现,能达到目的
AOP : 使用环绕方式对接口拦截,在拦截接口前后记录时间最后计算用时
Annotation : 自定义注解在接口上设置超时时间(timeout)和超时是否发送邮件选项(emailIfTimeout)
通过对接口实际执行时间和配置的超时时间比较,系统可以计算出接口是否超时,此时可使用日志(或其他能通知到开发人员的方式)记录具体哪个接口、什么参数以及执行时间
注解可以提供更多的选项,来为自己接口服务,比如支持注解到类上,批量为接口设置了默认超时时间、支持日志中显示的处理方法名称 等等...
代码实施
接口Annotation定义
/**
* 接口自定义属性
*
* @author tianshu on 16/8/30 下午4:55.
*/
@Target(value = {ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface InterfaceProperty {
/**
* 接口超时时间,单位毫秒.默认值100毫秒
* @return 设置的超时时间
*/
int timeout() default 400;
/**
* 当接口响应超时时,是否发送邮件.默认发送
* @return 返回ture需要发送邮件
*/
boolean emailIfTimeout() default true;
}
AOP实现
/**
* @author tianshu on 16/1/28 下午10:35.
*/
@Component
@Aspect
public class SystemRequestAspect {
/** 日志 */
private static final Logger LOG = LoggerFactory.getLogger(SystemRequestAspect.class);
/** 接口超时日志 */
private static final Logger INTERFACE_TIMEOUT_LOG = LoggerFactory.getLogger("INTERFACE_TIMEOUT_LOG");
@Around(value = "execution(* com.xx.xx.xx.xx..*.*(..))", argNames="pjp")
public Object validator(ProceedingJoinPoint pjp) throws Throwable {
Object[] args = pjp.getArgs();
/** 拦截的方法名称 */
String methodName = pjp.getTarget().getClass().getSimpleName() + "." + pjp.getSignature().getName();
try {
long start = System.currentTimeMillis();
Object obj = pjp.proceed(args);
long finish = System.currentTimeMillis();
long useTime = finish - start;
/** 接口响应时间监控 */
interfaceUseTimeMonitor(pjp.getTarget().getClass(), pjp.getSignature().getName(), args, useTime);
return obj;
} catch(Throwable e) {//处理你的异常
} finally {//处理其他
}
}
/**
* 接口响应时间监控
*
* @param targetClass 接口实现class
* @param methodName 接口方法
* @param args 接口如参
* @param useTime 调用接口实际使用时间
*/
private void interfaceUseTimeMonitor(Class targetClass, String methodName, Object[] args, long useTime) {
/** 与接口注解最高用时做比较,符合条件发送邮件 */
try {
Class[] classArray = new Class[args.length];
for(int i = 0; i < args.length ; ++i) {
classArray[i] = args[i].getClass();
}
Method method = targetClass.getMethod(methodName, classArray);
if(method.isAnnotationPresent(InterfaceProperty.class)) {
InterfaceProperty interfaceProperty = method.getAnnotation(InterfaceProperty.class);
if(useTime >= interfaceProperty.timeout()) {
if(INTERFACE_TIMEOUT_LOG.isInfoEnabled()) {
INTERFACE_TIMEOUT_LOG.info("接口超时,interface:[{}].useTime:[{}].settingUseTime:[{}].traceId:[{}]",
new Object[]{targetClass.getSimpleName() + "." + methodName,
useTime, interfaceProperty.timeout(), TraceUtils.getTrace()});
}
}
}
} catch(Throwable e) {
/** 监控逻辑处理错误什么都不做 */
}
}
}
原文:http://www.cnblogs.com/sealedbook/p/6065343.html
java 监控 m_Java接口响应超时监控相关推荐
- 第三方支付接口响应超时处理方法
问题:调用第三方支付接口超时怎么办? 解决方法:调用接口时设置超时时间,当接口超过60秒未返回结果,自动将改订单设置为处理中,然后由定时任务调用查询接口,同时如果用户下拉刷新页面也会发起单笔交易查询. ...
- 生产事故总结篇(2) 接口响应超时优化方案
1 查询类接口 一 mysql数据库查询超时问题 1 查询字段是否存在索引,索引是否失效 索引是个老生常谈的问题了, 需要特别注意下面几个点 唯一的值必须要建立唯一索引 比如订单号,售后单号,上门取件 ...
- java接口经常变动前端怎么办_Java进程故障排查(CPU资源占用高,接口响应超时,功能接口停滞等)...
故障分析 # 导致系统不可用情况(频率较大): 1)代码中某个位置读取数据量较大,导致系统内存耗尽,进而出现Full GC次数过多,系统缓慢: 2)代码中有比较消耗CPU的操作,导致CPU过高,系统运 ...
- 监控显示登录服务器超时,监控连接服务器超时怎么解决
监控连接服务器超时怎么解决 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 云耀 ...
- tomcat服务器接口响应超时,Tomcat请求超时
如果您试图阻止请求运行太长时间,那么在Tomcat中设置超时将无济于事.正如克里斯所说,您可以为Tomcat设置全局超时值.但是,从" Apache Tomcat连接器-通用方法超时&quo ...
- 接口访问超时 504 Gateway Time-out 优化方案
我们在调用GET请求获取数据的接口中,由于接口的处理逻辑复杂.查询的数据库表过多.nginx设置的超时时间过短和慢sql等原因,会造成接口请求了20秒左右,都没有结果返回,浏览器就会报错504 Gat ...
- java 接口超时控制_Java接口请求响应超时的解决办法
最近在做报表需求的时候,遇到一个问题: 前台给个请求,由于后台执行逻辑需要很长时间,因此导致页面响应超时. 在网上查询相关资料,找到了几种解决方案: 通过修改配置文件,延长响应时间: rest.Rea ...
- 淘宝天猫京东拼多多苏宁抖音等平台关键词监控价格API接口(店铺商品价格监控API接口调用展示)
淘宝京东拼多多苏宁抖音等平台关键词监控价格API接口(店铺商品价格监控API接口调用展示)代码对接如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼 ...
- 淘宝天猫京东拼多多抖音苏宁1688等平台关键词监控价格API接口(店铺商品价格监控API接口调用展示)
淘宝天猫京东拼多多抖音苏宁1688等平台关键词监控价格API接口(店铺商品价格监控API接口调用展示)代码对接如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必须以 ...
最新文章
- Android Handler sendMessage和 sendMessageDelayed的使用
- Oracle11.2新特性之listagg函数 (行列转换)
- 理解 Android Build 系统
- 计算机争夺战作文,电脑争夺战作文600字
- 小象电商是采用JAVA开发的B2B2C多用户商城系统。
- 无限极评论怎么删除php,TP5 无限极评论回复
- web 前端 如何分享到instagram_面对前端的后端化趋势,2020该如何学习web前端?
- python将txt读入矩阵_python读入txt数据,并转成矩阵
- python无法显示饼图
- 无法定位程序输入点 except_python自制王者荣耀抽卡程序
- 优化算法之——最速下降法
- 安卓投屏大师_【投屏】全平台全设备无线投屏工具幕享
- 我将出席 .NET Day in China 的圆桌讨论:探讨开发者就业话题
- LifecycleBeanPostProcessor的作用
- 三国群英传服务器维护是几点,20191112维护公告
- 阿里云机器的JVM内存调优经历(菜鸟必看,大神请绕道)
- C++:未定义引用静态类成员?
- html语言简介 ppt,网页制作与HTML语言基本结构简介.ppt
- 【历史上的今天】6 月 4 日:微软收购 Github;MacOS Mojave 推出;英特尔发布第四代架构 Haswell
- 快手签名算法php,2019 快手API签名算法