在本文中,我们将给您介绍关于springboot启动失败,Linux服务器安装了dynatrace代理APM的详细内容,此外,我们还将为您提供关于Androidadb.exe启动失败、androids
在本文中,我们将给您介绍关于springboot 启动失败,Linux 服务器安装了 dynatrace 代理APM的详细内容,此外,我们还将为您提供关于Android adb.exe 启动失败、android studio 启动失败(Failed to load JVM)、APO的接口级拓扑 VS Dynatrace ServiceFlow、ArcGis License 启动失败的知识。
本文目录一览:- springboot 启动失败,Linux 服务器安装了 dynatrace 代理APM
- Android adb.exe 启动失败
- android studio 启动失败(Failed to load JVM)
- APO的接口级拓扑 VS Dynatrace ServiceFlow
- ArcGis License 启动失败
springboot 启动失败,Linux 服务器安装了 dynatrace 代理APM
如何解决springboot 启动失败,Linux 服务器安装了 dynatrace 代理APM
我在启动 springboot API 应用程序时遇到问题。 (2.1.5 版) 它适用于除安装了 dynatrace (APM) 的服务器之外的所有服务器。 我试图用最少的 springboot 库启动这种简单类型的应用程序,但它也失败了。 我想启动此服务器的应用程序。请帮忙。
错误日志
2021-01-12 06:27:09.742|main |INFO |WorkerApplication:50|Starting WorkerApplication v0.0.1-SNAPSHOT on ip-10-5-253-160 with PID 24961 (/opt/apiservice_v2/apiservice-0.0.1-SNAPSHOT.jar started by root in /opt/apiservice_v2)
2021-01-12 06:27:09.751|main |INFO |WorkerApplication:679|The following profiles are active: live
2021-01-12 06:27:11.825|main |ERROR|SpringApplication:858|Application run Failed
java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.beanNameViewResolver
at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:64)
at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:108)
at org.springframework.context.annotation.ConfigurationClassBeanDeFinitionReader.loadBeanDeFinitionsForBeanMethod(ConfigurationClassBeanDeFinitionReader.java:181)
at org.springframework.context.annotation.ConfigurationClassBeanDeFinitionReader.loadBeanDeFinitionsForConfigurationClass(ConfigurationClassBeanDeFinitionReader.java:141)
at org.springframework.context.annotation.ConfigurationClassBeanDeFinitionReader.loadBeanDeFinitions(ConfigurationClassBeanDeFinitionReader.java:117)
at org.springframework.context.annotation.ConfigurationClasspostProcessor.processConfigBeanDeFinitions(ConfigurationClasspostProcessor.java:327)
at org.springframework.context.annotation.ConfigurationClasspostProcessor.postProcessBeanDeFinitionRegistry(ConfigurationClasspostProcessor.java:232)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDeFinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokebeanfactoryPostProcessors(PostProcessorRegistrationDelegate.java:95)
at org.springframework.context.support.AbstractApplicationContext.invokebeanfactoryPostProcessors(AbstractApplicationContext.java:705)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
at com.test.ee.servicenew.apiservice.WorkerApplication.main(WorkerApplication.java:17)
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:483)
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)
Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter] from ClassLoader [org.springframework.boot.loader.Launchedurlclassloader@442d9b6e]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:507)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:404)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:389)
at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:447)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory$$Lambda$188/296347592.apply(UnkNown Source)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.getTypeForFactoryMethod(AbstractAutowireCapablebeanfactory.java:738)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.determinetargettype(AbstractAutowireCapablebeanfactory.java:679)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.predictBeanType(AbstractAutowireCapablebeanfactory.java:647)
at org.springframework.beans.factory.support.Abstractbeanfactory.isfactorybean(Abstractbeanfactory.java:1518)
at org.springframework.beans.factory.support.Abstractbeanfactory.isfactorybean(Abstractbeanfactory.java:1023)
at org.springframework.boot.autoconfigure.condition.BeanTypeRegistry.addBeanTypeForNonAliasDeFinition(BeanTypeRegistry.java:195)
at org.springframework.boot.autoconfigure.condition.BeanTypeRegistry.addBeanTypeForNonAliasDeFinition(BeanTypeRegistry.java:159)
at org.springframework.boot.autoconfigure.condition.BeanTypeRegistry.addBeanType(BeanTypeRegistry.java:152)
at org.springframework.boot.autoconfigure.condition.BeanTypeRegistry.updateTypesIfNecessary(BeanTypeRegistry.java:140)
at org.springframework.boot.autoconfigure.condition.BeanTypeRegistry$$Lambda$186/247944893.accept(UnkNown Source)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at org.springframework.boot.autoconfigure.condition.BeanTypeRegistry.updateTypesIfNecessary(BeanTypeRegistry.java:135)
at org.springframework.boot.autoconfigure.condition.BeanTypeRegistry.getNamesForType(BeanTypeRegistry.java:97)
at org.springframework.boot.autoconfigure.condition.OnBeanCondition.collectBeanNamesForType(OnBeanCondition.java:298)
at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getBeanNamesForType(OnBeanCondition.java:289)
at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getBeanNamesForType(OnBeanCondition.java:278)
at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getMatchingBeans(OnBeanCondition.java:189)
at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getMatchOutcome(OnBeanCondition.java:125)
at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47)
... 25 common frames omitted
Caused by: java.lang.classFormatError: Method init in class javax/servlet/Filter has illegal modifiers: 0x1
at java.lang.classLoader.defineClass1(Native Method)
at java.lang.classLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.urlclassloader.defineClass(urlclassloader.java:455)
at java.net.urlclassloader.access$100(urlclassloader.java:73)
at java.net.urlclassloader$1.run(urlclassloader.java:367)
at java.net.urlclassloader$1.run(urlclassloader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.urlclassloader.findClass(urlclassloader.java:360)
at java.lang.classLoader.loadClass(ClassLoader.java:424)
at org.springframework.boot.loader.Launchedurlclassloader.loadClass(Launchedurlclassloader.java:93)
at java.lang.classLoader.loadClass(ClassLoader.java:357)
at java.lang.classLoader.defineClass1(Native Method)
at java.lang.classLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.urlclassloader.defineClass(urlclassloader.java:455)
at java.net.urlclassloader.access$100(urlclassloader.java:73)
at java.net.urlclassloader$1.run(urlclassloader.java:367)
at java.net.urlclassloader$1.run(urlclassloader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.urlclassloader.findClass(urlclassloader.java:360)
at java.lang.classLoader.loadClass(ClassLoader.java:424)
at org.springframework.boot.loader.Launchedurlclassloader.loadClass(Launchedurlclassloader.java:93)
at java.lang.classLoader.loadClass(ClassLoader.java:357)
at java.lang.classLoader.defineClass1(Native Method)
at java.lang.classLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.urlclassloader.defineClass(urlclassloader.java:455)
at java.net.urlclassloader.access$100(urlclassloader.java:73)
at java.net.urlclassloader$1.run(urlclassloader.java:367)
at java.net.urlclassloader$1.run(urlclassloader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.urlclassloader.findClass(urlclassloader.java:360)
at java.lang.classLoader.loadClass(ClassLoader.java:424)
at org.springframework.boot.loader.Launchedurlclassloader.loadClass(Launchedurlclassloader.java:93)
at java.lang.classLoader.loadClass(ClassLoader.java:357)
at java.lang.classLoader.defineClass1(Native Method)
at java.lang.classLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.urlclassloader.defineClass(urlclassloader.java:455)
at java.net.urlclassloader.access$100(urlclassloader.java:73)
at java.net.urlclassloader$1.run(urlclassloader.java:367)
at java.net.urlclassloader$1.run(urlclassloader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.urlclassloader.findClass(urlclassloader.java:360)
at java.lang.classLoader.loadClass(ClassLoader.java:424)
at org.springframework.boot.loader.Launchedurlclassloader.loadClass(Launchedurlclassloader.java:93)
at java.lang.classLoader.loadClass(ClassLoader.java:357)
at java.lang.class.getDeclaredMethods0(Native Method)
at java.lang.class.privateGetDeclaredMethods(Class.java:2688)
at java.lang.class.getDeclaredMethods(Class.java:1962)
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:489)
... 49 common frames omitted
2021-01-12 06:27:11.834|main |WARN |SpringApplication:839|Unable to close ApplicationContext
java.lang.IllegalStateException: Failed to introspect Class [org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter] from ClassLoader [org.springframework.boot.loader.Launchedurlclassloader@442d9b6e]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:507)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:404)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:389)
at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:447)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory$$Lambda$188/296347592.apply(UnkNown Source)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.getTypeForFactoryMethod(AbstractAutowireCapablebeanfactory.java:738)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.determinetargettype(AbstractAutowireCapablebeanfactory.java:679)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.predictBeanType(AbstractAutowireCapablebeanfactory.java:647)
at org.springframework.beans.factory.support.Abstractbeanfactory.isfactorybean(Abstractbeanfactory.java:1518)
at org.springframework.beans.factory.support.DefaultListablebeanfactory.doGetBeanNamesForType(DefaultListablebeanfactory.java:509)
at org.springframework.beans.factory.support.DefaultListablebeanfactory.getBeanNamesForType(DefaultListablebeanfactory.java:479)
at org.springframework.beans.factory.support.DefaultListablebeanfactory.getBeansOfType(DefaultListablebeanfactory.java:600)
at org.springframework.beans.factory.support.DefaultListablebeanfactory.getBeansOfType(DefaultListablebeanfactory.java:592)
at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1226)
at org.springframework.boot.SpringApplication.getExitCodeFromMappedException(SpringApplication.java:905)
at org.springframework.boot.SpringApplication.getExitCodeFromException(SpringApplication.java:891)
at org.springframework.boot.SpringApplication.handleExitCode(SpringApplication.java:877)
at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:826)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:327)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
at com.test.ee.servicenew.apiserviceft.WorkerApplication.main(WorkerApplication.java:17)
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:483)
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)
Caused by: java.lang.classFormatError: Method init in class javax/servlet/Filter has illegal modifiers: 0x1
at java.lang.classLoader.defineClass1(Native Method)
at java.lang.classLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.urlclassloader.defineClass(urlclassloader.java:455)
at java.net.urlclassloader.access$100(urlclassloader.java:73)
at java.net.urlclassloader$1.run(urlclassloader.java:367)
at java.net.urlclassloader$1.run(urlclassloader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.urlclassloader.findClass(urlclassloader.java:360)
at java.lang.classLoader.loadClass(ClassLoader.java:424)
at org.springframework.boot.loader.Launchedurlclassloader.loadClass(Launchedurlclassloader.java:93)
at java.lang.classLoader.loadClass(ClassLoader.java:357)
at java.lang.classLoader.defineClass1(Native Method)
at java.lang.classLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.urlclassloader.defineClass(urlclassloader.java:455)
at java.net.urlclassloader.access$100(urlclassloader.java:73)
at java.net.urlclassloader$1.run(urlclassloader.java:367)
at java.net.urlclassloader$1.run(urlclassloader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.urlclassloader.findClass(urlclassloader.java:360)
at java.lang.classLoader.loadClass(ClassLoader.java:424)
at org.springframework.boot.loader.Launchedurlclassloader.loadClass(Launchedurlclassloader.java:93)
at java.lang.classLoader.loadClass(ClassLoader.java:357)
at java.lang.classLoader.defineClass1(Native Method)
at java.lang.classLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.urlclassloader.defineClass(urlclassloader.java:455)
at java.net.urlclassloader.access$100(urlclassloader.java:73)
at java.net.urlclassloader$1.run(urlclassloader.java:367)
at java.net.urlclassloader$1.run(urlclassloader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.urlclassloader.findClass(urlclassloader.java:360)
at java.lang.classLoader.loadClass(ClassLoader.java:424)
at org.springframework.boot.loader.Launchedurlclassloader.loadClass(Launchedurlclassloader.java:93)
at java.lang.classLoader.loadClass(ClassLoader.java:357)
at java.lang.classLoader.defineClass1(Native Method)
at java.lang.classLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.urlclassloader.defineClass(urlclassloader.java:455)
at java.net.urlclassloader.access$100(urlclassloader.java:73)
at java.net.urlclassloader$1.run(urlclassloader.java:367)
at java.net.urlclassloader$1.run(urlclassloader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.urlclassloader.findClass(urlclassloader.java:360)
at java.lang.classLoader.loadClass(ClassLoader.java:424)
at org.springframework.boot.loader.Launchedurlclassloader.loadClass(Launchedurlclassloader.java:93)
at java.lang.classLoader.loadClass(ClassLoader.java:357)
at java.lang.class.getDeclaredMethods0(Native Method)
at java.lang.class.privateGetDeclaredMethods(Class.java:2688)
at java.lang.class.getDeclaredMethods(Class.java:1962)
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:489)
... 30 common frames omitted
pom.xml(简单库版本)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<!-- springboot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
WorkerApplication.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class WorkerApplication {
public static void main(String[] args) {
SpringApplication.run(WorkerApplication.class,args);
}
}
Android adb.exe 启动失败
经常遇到 Please ensure that adb is correctly located at ''D:\java\sdk\platform-tools\adb.exe'' and can be executed.
遇到问题描述:
运行 android 程序控制台输出
[2012-07-18 16:18:26 - ] The connection to adb is down, and a severe error has occured.
[2012-07-18 16:18:26 - ] You must restart adb and Eclipse.
[2012-07-18 16:18:26 - ] Please ensure that adb is correctly located at ''D:\java\sdk\platform-tools\adb.exe'' and can be executed.
解决问题:
百度 google 大家多说的是任务管理器 kill 掉 adb 或者重启 adb server,但我任务管理器就没有 adb , 猜测是某个程序占用了 adb 端口。于是按此思路查找。
5037 为 adb 默认端口 查看该端口情况如下:
netstat -aon|findstr "5037"
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 6540
发现 6540 占用了 5037 端口,继续查看 6540 的 task,发现是 wandoujia . 如下所示
tasklist|findstr "6540"
wandoujia_daemon.exe 6540 Console 1 4,276 K
接下来问题就好解决了,在任务管理器 kill 掉 wandoujia_daemon.exe ,运行 android 程序,ok .
1. 关闭豌豆荚进程
2.adb kill-server
3.adb start-server
4. 重启 Eclipse
OK
如何操作 adb kill-server 和 adb start-server
cmd 窗口
1、打开 cmd 窗口,进入 adb.exe 所在的文件夹目录,(adb 是 android 中的一个很有用的工具,用来查看 android 虚拟机中内容,并进行相应操作),因为我的 android-sdk-windows 是放在 D 盘上,所以要先进入 D 盘,直接输入 D:
如图所示就可以直接进入 D 盘了,再输入 cd android-sdk-windows\platform-tools 从而进入了 adb.exe 所在的目录。
android studio 启动失败(Failed to load JVM)
第一次使用android studio,安装完启动时提示错误:
Failed to load JVM -error code -4: C:\Program Files\Java\jdk1.7.0_67\jre. If you already have a 32-bit JDK installed, define JAVA_HOME variable in Computer
我以为自己的jdk环境变量配置错误,检查了一遍,然后在cmd 打指令 java -version;显示是有jdk环境的。
排查了很久,最终把 环境配置里的Path里面的参数,把JDK path放到第一位,再启动就可以了。
APO的接口级拓扑 VS Dynatrace ServiceFlow
在可观测性系统中,几乎所有的产品都会提供拓扑功能。大部分用户在初看这个拓扑之时都会觉得非常有用,但是一旦真实落地使用,就感觉这个拓扑比较鸡肋。这篇文章重点探讨APO团队是如何考虑让用户能够更好的使用拓扑,真正发挥出拓扑的价值。
应用级别拓扑定义
GPT介绍应用级别拓扑:
应用级别拓扑是一种用于表示应用程序内部及其与其他应用程序或系统之间关系的可视化模型。它描述了应用程序中的各个组件(如服务、数据库、消息队列等)之间的交互方式,包括调用关系、数据流动和依赖关系。应用级别拓扑的目标是帮助开发和运维团队更好地理解和监控应用程序的架构、性能和健康状况。
应用级别拓扑的关键要素:
- 服务或组件:表示应用程序中的各个服务或模块,例如Web服务、数据库服务、缓存服务等。
- 依赖关系:显示应用程序对外部系统或资源的依赖,例如第三方API、外部数据库等。
- 数据流动:描述数据在应用程序中的流动路径,从数据的输入源到输出目标。
- 性能指标:包括延迟、吞吐量、错误率等关键性能指标,帮助监控应用程序的运行状态。
应用级别拓扑有助于在复杂的分布式系统中跟踪请求的执行路径,识别性能问题和瓶颈,并在发生故障时快速定位问题的根源。
提供了应用级别拓扑的产品
常见的开源apm、npm软件都提供了应用级别拓扑
pinpoint的应用级别拓扑
skywalking的应用级别拓扑
deepflow基于流量的应用级别拓扑
应用级别拓扑鸡肋的原因
应用级别拓扑肯定是有用的,但是实际落地比较鸡肋的原因如下:
- 在小规模环境中比较有用,一旦达到几十个至上百个应用节点,拓扑结构就是一张蜘蛛网要清晰看出某个具体应用服务的依赖关系比较困难。
- 应用级别拓扑结构粒度较粗,难以精准判断依赖关系影响:应用级别拓扑反应的程序与程序之间的依赖关系,并不是接口层,比如一个应用提供了10个接口,其中某一个接口调用了redis,在应用级别拓扑结构就会依赖redis,但是其余的接口其实并不依赖redis,很难回答以下的问题:
- redis有告警了,影响哪些业务操作?根据应用拓扑只能猜测redis告警,可能影响应用,具体是否受影响要在深入人为排查。
- 业务操作入口(用户直接使用的接口)执行缓慢,如何找到到底哪个依赖服务导致的呢?在应用拓扑中,得顺着应用拓扑所有路径去排查每个应用(几乎需要排查所有被监控的应用,因为所有的应用最后都可能形成一个拓扑结构)。现在的优化措施是在应用拓扑结构中优先排查应用告警的应用,这样希望能够尽早找到故障节点,但是有时仍然需要排查不少的应用,才能撞到故障根因节点。
- 业务操作入口(用户直接使用的接口)执行缓慢的另外一种排查思路,就是查看业务操作入口的Trace,这样看Trace缺失了统计信息,应用级别拓扑本应该发挥统计数据价值无用武之地。
业界王者Dynatrace的ServiceFlow解决了应用拓扑鸡肋的问题
以下是Dynatrace 的Service Flow图
初看和应用拓扑差不多,反应的也是应用节点直接的依赖调用关系,但是实际上和应用拓扑有以下的不同。
精准反应应用调用关系:相同的应用节点在拓扑中会按照调用顺序出现多次
ServiceFlow精准的反应应用接口之间的调用关系。相同业务操作入口的拓扑图才会被归属在同一个ServiceFlow中。
基于ServcieFlow 可以精准的找到依赖关系,比如redis告警,到底是如何影响业务调用链的。
基于ServiceFlow可以清晰的看出来业务操作入口的影响是由于下游依赖的哪些应用接口执行导致的。
在大规模业务中,会将对入口业务操作影响贡献不大的应用收缩,从而在一张图中清晰看出调用关系
APO中的接口URL级别拓扑和ServiceFlow异曲同工
APO中的URL接口级别拓扑是根据相同业务操作入口的Trace拓扑不断分析统计而成,虽然看上去像应用级别拓扑,但是实际是URL接口级别拓扑,这样可以清楚看出应用为了执行此类业务的调用关系。
如果redis告警,在此拓扑中未发现有redis,说明redis告警不会影响此业务,不需要像应用级别拓扑再次猜测redis告警到底影响了哪些业务。
APO也实现了同样的效果:精准反应应用调用关系------相同的应用节点在拓扑中会按照调用顺序出现多次
根据业务入口延时相似度对拓扑结构的收缩,保证一张图可以清晰显示业务调用关系
APO利用延时曲线相似度来收缩相似度非常低的接口服务。
业务操作入口的延时曲线与下游依赖的节点延时曲线完全不相似,说明两者应该不是很相关,可以收缩起来。
相似度较高的曲线,比如下图,紫色的延时曲线明显和绿色延时曲线很相似,还有一些曲线是有波动的,但是还有很多曲线是很平稳的。那些曲线平稳的肯定对此业务操作入口的波动贡献很小,所以可以收缩。
未来基于URL接口级别拓扑能够实现以下功能
在APO的规划当中会实现以下的功能:
- 每个微服务接口点击详情之后,自动关联业务操作入口从而快速判断故障影响面
- 按照URL接口界别拓扑,自动化精准关联下游依赖节点告警
APO介绍:
国内开源首个 OpenTelemetry 结合 eBPF 的向导式可观测性产品
apo.kindlingx.com
https://github.com/CloudDetail/apo
ArcGis License 启动失败
安装ArcGis10.2后,License启动失败,点击启动没有任何反应,ArcGis License Manager服务显示已经启动(重启服务也无效),但是在界面上仍然显示启动按钮,Not_Set和Localhost无效,需要采取以下这种方法来重启读取许可启动,但是每次开机可能会反复出现这个问题,建议写成可执行bat程序,使用的时候打开即可。
执行步骤
- 打开cmd,进入license bin 目录下进行服务命令式注册,输入lmgrd -z -c service.txt
- 执行结束后,重新打开license 启动——重新获取许可即可。
- 观察程序是否正常运行,没有出现fail等字样,如果出现失败的话,到services.msc服务中,将ArcGis License Manager关闭后,再尝试。
封装程序
新建一个txt文档,编辑好后,将后缀改成bat即可。
cd D:\Program Files (x86)\ArcGIS 10.3\License10.3\bin
lmgrd -z -c service.txt
pause
今天关于springboot 启动失败,Linux 服务器安装了 dynatrace 代理APM的分享就到这里,希望大家有所收获,若想了解更多关于Android adb.exe 启动失败、android studio 启动失败(Failed to load JVM)、APO的接口级拓扑 VS Dynatrace ServiceFlow、ArcGis License 启动失败等相关知识,可以在本站进行查询。
本文标签: