分析 Java Spring 应用程序 [已关闭]

2022-09-02 12:33:10

我有一个Spring应用程序,我认为它有一些瓶颈,所以我想用一个探查器来运行它,以测量哪些功能需要多少时间。关于我应该如何做到这一点的任何建议?

我正在运行STS,该项目是一个maven项目,我正在运行Spring 3.0.1


答案 1

我已经使用Spring AOP完成了这项工作。

有时我需要一个关于在我的项目中执行某些方法需要多少时间的信息(例如控制器的方法)。

在 servlet xml 中,我把

<aop:aspectj-autoproxy/>

另外,我需要为以下方面创建类:

@Component
@Aspect
public class SystemArchitecture {

    @Pointcut("execution(* org.mywebapp.controller..*.*(..))")
    public void businessController() {
    }
}

和剖面器方面:

@Component
@Aspect
public class TimeExecutionProfiler {

    private static final Logger logger = LoggerFactory.getLogger(TimeExecutionProfiler.class);

    @Around("org.mywebapp.util.aspects.SystemArchitecture.businessController()")
    public Object profile(ProceedingJoinPoint pjp) throws Throwable {
        long start = System.currentTimeMillis();
        logger.info("ServicesProfiler.profile(): Going to call the method: {}", pjp.getSignature().getName());
        Object output = pjp.proceed();
        logger.info("ServicesProfiler.profile(): Method execution completed.");
        long elapsedTime = System.currentTimeMillis() - start;
        logger.info("ServicesProfiler.profile(): Method execution time: " + elapsedTime + " milliseconds.");

        return output;
    }

    @After("org.mywebapp.util.aspects.SystemArchitecture.businessController()")
    public void profileMemory() {
        logger.info("JVM memory in use = {}", (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()));
    }
}

就这样。当我从我的 web 应用程序请求页面时,有关方法执行时间和 JVM 内存使用情况的信息会打印在我的 web 应用程序的日志文件中。


答案 2

我推荐VisualVM进行一般的应用程序分析。它在JDK中从1.6_10版本开始可用,恕我直言,它比Eclipse TPTP更快,更可用。

(如果您的Spring应用程序在应用程序服务器(例如Tomcat)中工作,您可以尝试将其部署到tc Server开发人员版本(可在STS下载中找到)。它具有有趣的监视功能。似乎tc Server开发人员版本不再维护了。

2019.02.22.更新:更新了VisualVM url(感谢@Jeff)和tc Server信息。就个人而言,我目前使用Glowroot来监视在应用程序服务器中运行的Spring应用程序。


推荐