从零搭建项目开发框架-24系统性能监控
2017-07-08 本文已影响0人
孔垂云
系统在初期运行时可能没问题,每个功能都快速响应,但是随着数据量的增多,可能个别功能不能快速响应,但是用户还不好描述具体哪地方慢,这时候就需要通过AOP来进行性能监控,及时发现系统存在的问题。
@Aspect
public class PerformanceAspect {
private static Logger logger = LoggerFactory.getLogger("performanceLog");
@Around("execution (* com.critc.*.*.service.*.*(..))")
public Object performanceIterceptor(ProceedingJoinPoint joinPoint) throws Throwable {
Object result = null;
long l = System.currentTimeMillis();
result = joinPoint.proceed();
long consume = System.currentTimeMillis() - l;
if (consume > 3000) {
//记录系统操作较慢的service处理过程
logger.info("实体类:" + joinPoint.getTarget());
logger.info("方法名:" + joinPoint.getSignature().getName());
// 得到被拦截方法参数,并打印
Object[] args = joinPoint.getArgs();
for (int i = 0; i < args.length; i++) {
logger.info("方法参数:" + i + " -- " + args[i]);
}
logger.info("用时:" + consume);
}
return result;
}
}
applicationContext.xml
增加配置
<!-- 系统性能监控切面-->
<bean id="performanceAspect" class="com.critc.plat.core.aop.PerformanceAspect"/>
这个aop的原理是@Around环绕型切面,开始时记录当前时间,结束时把结束时间-开始时间,如果超过3000毫秒,则记录对应的日志。
这样就可以监控所有service层的操作时间,如果操作时间超过3秒,记录下当前类名、方法名及所有参数,便于追溯问题,可以进行后续的性能调优,比如加索引、优化数据存储等等。