性能测试时发现系统偶尔慢,需要使用工具来判断问题原因,前前后后使用三个工具,记录一下使用过程。
系统环境:
EulerOS release 2.0 (SP8)
Linux ecs-5222 4.19.36-vhulk1907.1.0.h475.eulerosv2r8.aarch64 #1 SMP Mon Jul 22 00:00:00 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux
1. 阿里Arthas
使用profile功能,系统报错,不支持arm
2. skywalking 6.6
运行一段时间,UI响应非常慢,且系统占用CPU非常,看配置发现存储为默认H2(内存);改为文件方式,再运行一段时间还是非常慢;最后改为ElasticSearch 6.3.2版本。
但skywalking有个问题,trace中spring service、jdbc相关内容都没有,只有servlet信息。
由于后续自定义pp插件及编译麻烦,又回来研究了skywalking,发现spring service需要使用option中插件拷贝到plugin目录下才行;而且自定义插件也很方便
但下载源码编译报错。
[ERROR] ../Downloads/skywalking-6.6.0/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/command/TraceIgnoreCommand.java:[39,48] 找不到符号
[ERROR] 符号: 变量 KeyStringValuePair
[ERROR] 位置: 类 org.apache.skywalking.apm.network.trace.component.command.TraceIgnoreCommand
[ERROR] ../Downloads/skywalking-6.6.0/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/command/ServiceResetCommand.java:[46,20] 找不到符号
[ERROR] 符号: 类 KeyStringValuePair
[ERROR] 位置: 类 org.apache.skywalking.apm.network.trace.component.command.ServiceResetCommand
[ERROR] ../Downloads/skywalking-6.6.0/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/command/ServiceResetCommand.java:[48,20] 找不到符号
[ERROR] 符号: 类 KeyStringValuePair
[ERROR] 位置: 类 org.apache.skywalking.apm.network.trace.component.command.ServiceResetCommand
[ERROR] ../Downloads/skywalking-6.6.0/apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/command/EndpointResetCommand.java:[40,27] 程序包KeyStringValuePair不存在
后续再看看如何解决
3. pinpoint-1.8.5
下载速度很慢,后来通过香港的服务器进行下载,然后传到国内,速度很快
pp安装有点复杂,按照 www.bbsmax.com/A/gGdX3oL15… 进行安装的。
由于本机上已经安装了一个zookeeper,启动hbase时存在冲突,就将端口改为2182;都启动完成后,agent经常报超时,后来发现collector和web上的zookeeper端口也需要修改。
pinpoint的trace没有jdbc信息,另外没法和应用关联起来。
jdbc信息没有的原因可能不是apm的问题,应该是采用了gaussdbT的问题。
如是准备开发插件,首先将trace中增加应用信息。
下载pp源码后,发现编译有点变态,只好在服务器上搭建一个环境,将jdk6、jdk7、jdk8、jdk9都下载下来,然后编译通过,编译比较慢。
插件参考:blog.csdn.net/boling_cava…
在本机进行插件开发,然后将代码传到服务器上进行编译,发现只能全部编译。
然后将编译好的jar传到web、collector、agent目录,启动tomat pp-web报错,找不到Caused by: java.lang.ClassNotFoundException: com.navercorp.pinpoint.bootstrap.plugin.ProfilerPlugin;就将web下到插件删除;重启启动应用,发现trace可以看到自定义插件拦截的方法,但没有参数信息;检查代码、官方文章、百度各类文章,发现也没有啥特殊,后来想想将pinpoint-bootstrap-core的jar拷贝到web下,并将i 定义插件jar也拷贝进去,重启,竟然可以看到了。。。
pinpoint缺少根据traceid 查找的功能,但有通过log4j等日志工具将traceID记录下来的功能