赞
踩
系统出现请求卡顿缓慢,使用jstack,jmap,jstat都没查看到问题
写一个切面,切controller service dao mapper层,看是哪层出现问题,在具体排查
切面代码
- import org.aspectj.lang.ProceedingJoinPoint;
- import org.aspectj.lang.annotation.Around;
- import org.aspectj.lang.annotation.Aspect;
- import org.aspectj.lang.annotation.Pointcut;
- import org.aspectj.lang.reflect.MethodSignature;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.stereotype.Component;
-
- import java.lang.reflect.Method;
- import java.util.Arrays;
-
- @Aspect
- @Component
- public class TimingAspect {
-
- private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
-
- @Pointcut("execution(* com.company..controller..*.*(..)) || " +
- "execution(* com.company..service..*.*(..)) || " +
- "execution(* com.company..mapper..*.*(..)) || " +
- "execution(* com.company..dao..*.*(..))")
- public void performancePointcut() {}
-
- @Around("performancePointcut()")
- public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
- long start = System.currentTimeMillis();
- Object result = joinPoint.proceed(); // 继续执行拦截的方法
- long finish = System.currentTimeMillis();
- MethodSignature signature = (MethodSignature) joinPoint.getSignature();
- Method method = signature.getMethod();
- String methodName = joinPoint.getSignature().toString();
- String className = joinPoint.getTarget().getClass().getName();
- LOGGER.info("执行类" + className + " 执行方法:"+methodName + "请求参数"+Arrays.toString(joinPoint.getArgs()) +" 方法耗时:" + (finish - start) + "ms");
- return result;
- }
-
- }

查看日志,配合jstack线程栈 看哪个方法最耗时长。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。