Я читал эту статью раньше: Время медленного запуска Spring AOP
Моя проблема в том, что когда я запускаю приложение Java Spring-boot, оно будет очень медленным на dev / ежедневная среда (7-15 минут), но быстрая (3 минуты) в моей MA C или рабочей среде
Когда она медленная (в среде разработчика / ежедневная), я обнаружил, что процесс Java обычно стоить 100%, но у меня есть многоядерный, как показано ниже:
Затем я использую jstack, чтобы найти 100% Thread, чтобы увидеть, что он делает:
Полный стек:
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)
Я думаю:
Моя проблема похожа на вопрос выше
dev / daily env slow, мой mac / production fast состоит в том, что когда aop classloader читает файл, некоторые машины имеют ssd или хорошую производительность ввода / вывода, а некоторые нет.
Мой вопрос:
- вопрос только говорит мне, чтобы уменьшить область @pointcut или @around (чтобы aop будет искать меньше классов), б но как я могу найти, какие
@pointcut
или @around
имеют проблемы с производительностью? Или как я могу записать время поиска каждого AOP, чтобы я мог изменить его c один?
Большое спасибо за чтение здесь