Профиль весной AOP запуска медленно - PullRequest
0 голосов
/ 29 апреля 2020

Я читал эту статью раньше: Время медленного запуска Spring AOP

Моя проблема в том, что когда я запускаю приложение Java Spring-boot, оно будет очень медленным на dev / ежедневная среда (7-15 минут), но быстрая (3 минуты) в моей MA C или рабочей среде

Когда она медленная (в среде разработчика / ежедневная), я обнаружил, что процесс Java обычно стоить 100%, но у меня есть многоядерный, как показано ниже: enter image description here

Затем я использую jstack, чтобы найти 100% Thread, чтобы увидеть, что он делает: enter image description here

Полный стек:

main" #1 prio=5 os_prio=0 tid=0x00007fbf7345d800 nid=0x10ee runnable [0x00007fbf76079000]   java.lang.Thread.State: RUNNABLE
        at java.net.URLClassLoader$2.run(URLClassLoader.java:569)
        at java.net.URLClassLoader$2.run(URLClassLoader.java:567)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findResource(URLClassLoader.java:566)
        at org.springframework.boot.loader.LaunchedURLClassLoader.findResource(LaunchedURLClassLoader.java:58)
        at java.lang.ClassLoader.getResource(ClassLoader.java:1096)
        at java.net.URLClassLoader.getResourceAsStream(URLClassLoader.java:232)
        at org.aspectj.apache.bcel.util.NonCachingClassLoaderRepository.loadJavaClass(NonCachingClassLoaderRepository.java:255)
        at org.aspectj.apache.bcel.util.NonCachingClassLoaderRepository.loadClass(NonCachingClassLoaderRepository.java:242)
        at org.aspectj.apache.bcel.util.NonCachingClassLoaderRepository.loadClass(NonCachingClassLoaderRepository.java:249)
        at org.aspectj.weaver.reflect.Java15AnnotationFinder.getAnnotations(Java15AnnotationFinder.java:202)
        at org.aspectj.weaver.reflect.ReflectionBasedResolvedMemberImpl.unpackAnnotations(ReflectionBasedResolvedMemberImpl.java:211)
        at org.aspectj.weaver.reflect.ReflectionBasedResolvedMemberImpl.hasAnnotation(ReflectionBasedResolvedMemberImpl.java:163)
        at org.aspectj.weaver.patterns.ExactAnnotationTypePattern.matches(ExactAnnotationTypePattern.java:109)        at org.aspectj.weaver.patterns.ExactAnnotationTypePattern.matches(ExactAnnotationTypePattern.java:96)
        at org.aspectj.weaver.patterns.AnnotationPointcut.matchInternal(AnnotationPointcut.java:156)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:372)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
        at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:134)
        - locked <0x00000007408ecb78> (a java.util.concurrent.atomic.AtomicBoolean)
        at com.xxxx.xxxx.WebApplication.main(WebApplication.java:45)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)

Я думаю:

  1. Моя проблема похожа на вопрос выше

  2. dev / daily env slow, мой mac / production fast состоит в том, что когда aop classloader читает файл, некоторые машины имеют ssd или хорошую производительность ввода / вывода, а некоторые нет.

Мой вопрос:

  1. вопрос только говорит мне, чтобы уменьшить область @pointcut или @around (чтобы aop будет искать меньше классов), б но как я могу найти, какие @pointcut или @around имеют проблемы с производительностью? Или как я могу записать время поиска каждого AOP, чтобы я мог изменить его c один?

Большое спасибо за чтение здесь

...