当前位置: 首页 > 面试题库 >

对Java Spring应用程序进行性能分析

濮阳旺
2023-03-14
问题内容

我有一个Spring应用程序,我认为它存在一些瓶颈,因此我想用一个探查器运行它来衡量哪些功能需要花费多少时间。有什么建议我应该怎么做?

我正在运行STS,该项目是一个maven项目,并且正在运行Spring 3.0.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应用程序的日志文件中打印出来。



 类似资料:
  • 问题内容: 我正在尝试使用大型复杂的tomcat Java Web应用程序解决性能问题。目前最大的问题是,内存使用量有时会激增,应用程序将变得无响应。我已经修复了我可以使用日志探查器和日志文件的贝叶斯分析解决的所有问题。我正在考虑在生产的Tomcat服务器上运行探查器。 致读者的注意事项: 我了解有些人可能会发现对生产应用程序进行冒犯性分析的想法。请放心,我已经用尽了大多数其他选项。我正在考虑这样

  • 问题内容: 为了在Linux上开发高度网络密集型服务器应用程序,首选哪种架构?这个想法是,该应用通常可以在具有多个内核(虚拟或物理)的机器上运行。考虑到性能是关键标准,选择多线程应用程序还是采用多进程设计更好?我确实知道资源共享和从多个进程访问此类资源的同步是很多编程开销,但是如前所述,整体性能是关键要求,因此我们可以忽略这些事情。编程语言为C / C ++。 我听说,即使是多线程应用程序(单个进

  • 问题内容: 我正在使用Node.js进行一些Web抓取。我想使用XPath,因为我可以使用几种GUI半自动生成它。问题是我找不到有效的方法。 非常慢。它会在一分钟左右的时间内解析500KiB文件,并具有完整的CPU负载和大量内存。 流行的HTML解析库(例如)既不支持XPath,也不公开W3C兼容的DOM。 很明显,有效的HTML解析是在WebKit中实现的,因此可以使用或将其作为一种选择,但这些

  • IDE:Intellij IDEA 11.1.2 jProfiler:v.7.1.2 操作系统:Windows 7 32位 jProfiler集成到IDEA中。 Java控制台程序使用VM:-server或-Xshare: off调用。 总计: 单击概要文件“[名称]”或附加到JVM后,在左侧菜单中打开带有非活动按钮的jProfiler,然后启动程序,但没有结果。 如果使用会话创建会话- "无法连

  • 我一直在研究swagger,认为它是为我的团队api自动生成文档的一种可能方式http://swagger.io/getting-started/.这似乎很有希望,但我发现他们的文档缺乏。 话虽如此,我有几个非常基本的问题。 是否可以只使用Spring应用程序来使用swagger?我们的应用程序既不是jersey也不是JAX-RS应用程序。有人知道普通Spring应用程序是否可以与swagger一

  • 问题内容: 我有一个Windows应用程序,我想对其进行容器化。它是Windows桌面应用程序(不是Web应用程序)。我进行了一些搜索,发现关于容器化桌面应用程序的知识很少。我要容器化的应用程序在WindowsServerCore上运行良好。我的机器上有Windowsservercore映像。 我想知道如何进行容器化。有任何文档或有用的视频吗?当我完成dockerfile时,我可以与我的应用程序G