Giter Site home page Giter Site logo

qunarcorp / bistoury Goto Github PK

View Code? Open in Web Editor NEW
4.0K 153.0 821.0 31.7 MB

Bistoury是去哪儿网的java应用生产问题诊断工具,提供了一站式的问题诊断方案

License: GNU General Public License v3.0

Java 74.63% Shell 0.45% HTML 7.40% CSS 2.74% JavaScript 13.53% Perl 1.23% Less 0.02%
java debug monitor agent jvm trouble-shooting bistoury cpu debugging

bistoury's People

Contributors

fantasywxx avatar qxo avatar wallezhang avatar wenbeicai avatar wikiwikiwiki avatar xleiy avatar yuyijq avatar zzh1991 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bistoury's Issues

Listener support Java generic type

你好,目前bistoury中的qunar.tc.bistoury.serverside.configuration.DynamicConfig方法:

void addListener(Listener listener);

其中的参数qunar.tc.bistoury.serverside.configuration.Listener目前的定义如下:

public interface Listener {
    void onLoad(DynamicConfig config);
}

现在这种配置导致业务方在使用自己公司的ConfigCenter的时候不好适配,如下面这种情况就不太好适配。

return new DynamicConfig() {
			@Override
			public void addListener(Listener listener) {
				mapConfig.addListener(new Configuration.SkipFirstConfigListener<Map<String, String>>() {
					@Override
					protected void doLoad(String application, String name, Map<String, String> value) {
						//listener.onLoad();
					}
				});
			}
          // other methods override
}

建议可修改Listener为如下接口:

public interface Listener<T> {
    void onLoad(T config);
}

同时修改qunar.tc.bistoury.serverside.configuration.DynamicConfig修改为:

interface DynamicConfig<T> {
   void addListener(Listener<T> listener);
    //....
}

多个应用IP冲突怎么办?

如果一台服务器有多个应用需要监控,那么在添加服务器时会报:“IP地址与XXXX的IP地址冲突,主机添加失败”。
这种情况下该怎么处理?有什么解决方法吗?

debug断点添加失败

一个Tomcat下部署多个app,Initializing ClassPathLookup, default classpath里只打印了其中一个,是不是意味着只会从这一个app的classes路径里加载相关的class,如果需要调试另一个app里的断点,则添加断点时会报 register breakpoint fail, File was not found in the executable
下面的是bistoury日志
image

下面的是tomcat里的app
image

docker部署agent时报错

  • bistoury-agent的log报错信息
[19:19:26 [cpu-jstack-task-thread-1] QTraceId[] ERROR q.t.b.a.task.cpujstack.TaskRunner] - cpu jstack tast run error
java.lang.NoClassDefFoundError: com/sun/tools/attach/VirtualMachine
	at qunar.tc.bistoury.agent.task.cpujstack.JStackPidExecutor.execute(JStackPidExecutor.java:42) ~[bistoury-agent-task-2.0.6.jar:na]
	at qunar.tc.bistoury.agent.task.cpujstack.TaskRunner.doRun(TaskRunner.java:112) ~[bistoury-agent-task-2.0.6.jar:na]
	at qunar.tc.bistoury.agent.task.cpujstack.TaskRunner.run(TaskRunner.java:85) ~[bistoury-agent-task-2.0.6.jar:na]
	at com.google.common.util.concurrent.MoreExecutors$ScheduledListeningDecorator$NeverSuccessfulListenableFutureTask.run(MoreExecutors.java:623) [guava-20.0.jar:na]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_111]
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_111]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_111]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_111]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_111]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_111]
	at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
Caused by: java.lang.ClassNotFoundException: com.sun.tools.attach.VirtualMachine
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_111]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_111]
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_111]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_111]
	... 11 common frames omitted
  • 问题由来
    我的应用和agent部署在同一个docker容器中,但是当proxy连接agent的时候报错如上,请问是哪方面的问题。:worried:

在线debug断点添加失败register breakpoint fail, File was not found in the executable

想在开发机上面试下在线debug功能,但添加断点时报错 register breakpoint fail, File was not found in the executable

Springboot jar工程是用jdk1.7版本启动的
bistoury 是用jdk1.8启动的.

tail -f bistoury/bistoury.log

java.lang.IllegalStateException: register breakpoint fail, File was not found in the executable
	at qunar.tc.bistoury.instrument.client.debugger.DefaultDebugger.doRegisterBreakpoint(DefaultDebugger.java:152) ~[bistoury-instrument-client-2.0.5.jar:na]
	at qunar.tc.bistoury.instrument.client.debugger.DefaultDebugger.registerBreakpoint(DefaultDebugger.java:96) ~[bistoury-instrument-client-2.0.5.jar:na]
	at qunar.tc.bistoury.attach.arthas.debug.QDebugClient.registerBreakpoint(QDebugClient.java:63) ~[bistoury-attach-arthas-2.0.5.jar:na]
	at qunar.tc.bistoury.attach.arthas.debug.QDebugAddCommand.process(QDebugAddCommand.java:74) ~[bistoury-attach-arthas-2.0.5.jar:na]
	at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.process(AnnotatedCommandImpl.java:82) [arthas-core-3.1.1.jar:3.1.1]
	at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl.access$100(AnnotatedCommandImpl.java:18) [arthas-core-3.1.1.jar:3.1.1]
	at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:111) [arthas-core-3.1.1.jar:3.1.1]
	at com.taobao.arthas.core.shell.command.impl.AnnotatedCommandImpl$ProcessHandler.handle(AnnotatedCommandImpl.java:108) [arthas-core-3.1.1.jar:3.1.1]
	at com.taobao.arthas.core.shell.system.impl.QProcessImpl$CommandProcessTask.run(QProcessImpl.java:370) [bistoury-attach-arthas-2.0.5.jar:3.1.1]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_67]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_67]
	at java.lang.Thread.run(Thread.java:745) [na:1.7.0_67]

请帮下是什么原因导致失败.

在线debug点击后无反应

使用官方提供的脚本,直接快速启动,启动后的日志如下图
image
界面可以正常登陆,但是点击在线debug或者动态监控不会出现选择类的界面,偶尔会出现可以选择的界面,大部分都无反应,web控制台和接口我都没看到报什么不错误,请问需要在哪里看日志排查是什么问题吗?
ps: 同样的操作放在另外一台一样的服务的服务器上就可以正常操作

在线debug遇到断点添加失败

在线debug页面点击添加断点的时候报错,显示register breakpoint fail, File was not found in the executable。使用的是quick-start,本机启动。
image

在k8s环境中部署bistoury的感受

1.相比较于官方提供的快速启动版本的便捷性,这个伪生产部署(beta环境哈)真的是痛苦(不知道是不是因为k8s的原因)。
2.之前构建镜像时候启动脚本一直报一些错误(基于openjdk:8-jdk源镜像),可能是语法兼容性,做了些微调(这里就不赘述了)
3.浏览器 调用websocket前会先到ui拿去proxy的ws链接,但是返回的是ip(集群内部ip),导致浏览器一直无法建立连(本地局域网和集群网络是两套网络环境),后续手动改了下ui的源码,算是简单的跳过去了;
4.应用中心配置的应用及相关服务列表,这个感觉很不友好,每次都要手动配置agent绑定机器的ip及相关端口(不知道官方是否有啥好的实践,可以做到自动从zk中获取注册的agent(agent连接proxy后,proxy会把相应信息存到zk),因为k8s每次应用重新部署ip都会变更,所以调整及其不变,期待官方有好的建议给到,谢谢

建议在线debug增加按照不同类型变量查找的功能

在线debug遇到变量比较多,或者变量内容比较大的时候,想找到自己关注的变量比较困难,通过浏览器自带的搜索功能,可能会搜索到代码中的变量名字,建议增加查找功能,直接定位到变量所在的位置

启动agent报错

com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
at sun.tools.attach.LinuxVirtualMachine.(LinuxVirtualMachine.java:106) ~[tools.jar:na]
at sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:63) ~[tools.jar:na]
at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:208) ~[tools.jar:na]
at qunar.tc.bistoury.agent.task.cpujstack.JStackPidExecutor.execute(JStackPidExecutor.java:42) ~[bistoury-agent-task-2.0.6.jar:na]
at qunar.tc.bistoury.agent.task.cpujstack.TaskRunner.doRun(TaskRunner.java:112) [bistoury-agent-task-2.0.6.jar:na]
at qunar.tc.bistoury.agent.task.cpujstack.TaskRunner.run(TaskRunner.java:85) [bistoury-agent-task-2.0.6.jar:na]
at com.google.common.util.concurrent.MoreExecutors$ScheduledListeningDecorator$NeverSuccessfulListenableFutureTask.run(MoreExecutors.java:623) [guava-20.0.jar:na]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_212]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_212]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_212]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_212]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_212]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_212]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212]

suggest change ReleaseInfoService to SPI

建议将qunar.tc.bistoury.ui.service.ReleaseInfoService暴露为一个公共的SPI接口,

因我司的release info的路径以及文件内容格式和Qunar的不同,所以我们想扩展这个接口的实现,

涉及:

  • qunar.tc.bistoury.ui.service.impl.ReleaseInfoServiceImpl
  • qunar.tc.bistoury.proxy.communicate.ui.handler.commandprocessor.processor.ArthasCommandProcessor

非常感谢。

Docs in english ?

I could not find any docs or even a description in English, so I decided to ask here. Do you plan to have english docs in the near future to demystify the project for the rest of the world (like alibaba/arthas for example 😄) ?

bistoury-proxy 启动建议

bistoury-proxy模块中的Bootstrap类中对webapp路径的获取不太友好,完全依赖用户从什么目录下执行bistoury-proxy.sh

String webappDirLocation = "../webapp/";
            StandardContext ctx = (StandardContext) tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath());

这种写法相当于强制用户必须在bistoury-proxy/bin/目录下执行./bistoury-proxy.sh start命令。
使得像./bin/bistoury-proxy.sh start之类的命令都不能使用。因为会导致获取不到webapp的正确路径。

感觉应该在shell脚本中获取当前的bistoury-proxy的HOME地址,然后基于BISTOURY-PROXY-HOME/webapp来读取会更好一些。

支持监控报警吗

支持设置fullGc次数、CPU负载等报警吗,如果没有,后续会提供不

debug调试时提示“没有那个文件或目录”---监测的路径不对

在“在线debug”上找到对应类,点击调试时提示如下:
反编译失败,/weblogic/deploy_dir/test-server-0.0.1-SNAPSHOT_deploy/20191219122403/test-server-0.0.1-SNAPSHOT/WEB-INF/lib/test-service-0.0.1-SNAPSHOT.jar (没有那个文件或目录)

分析agent报文发现根路径少了一个/home,详细报文如下:
[14:06:16 [bistoury-agent-netty-thread-1] QTraceId[] INFO q.t.b.remoting.netty.TaskProcessor] - receive decompiler command, id [191224.140615.9.1.183.120.18588.3254], command [DecompilerCommand{className='com.gf.test.networktest.controller.impl.NetworkTestControllerImpl', classPath='file:/home/weblogic/deploy_dir/test-server-0.0.1-SNAPSHOT_deploy/20191219122403/test-server-0.0.1-SNAPSHOT/WEB-INF/lib/test-service-0.0.1-SNAPSHOT.jar!/com/gf/test/networktest/controller/impl/NetworkTestControllerImpl.class'}]
[14:06:16 [log-agent-exec-0] QTraceId[] ERROR q.t.b.c.decompiler.DecompilerTask] - decompiler error, command: DecompilerCommand{className='com.gf.test.networktest.controller.impl.NetworkTestControllerImpl', classPath='file:/home/weblogic/deploy_dir/test-server-0.0.1-SNAPSHOT_deploy/20191219122403/test-server-0.0.1-SNAPSHOT/WEB-INF/lib/test-service-0.0.1-SNAPSHOT.jar!/com/gf/test/networktest/controller/impl/NetworkTestControllerImpl.class'}
java.io.FileNotFoundException: /weblogic/deploy_dir/test-server-0.0.1-SNAPSHOT_deploy/20191219122403/test-server-0.0.1-SNAPSHOT/WEB-INF/lib/test-service-0.0.1-SNAPSHOT.jar (没有那个文件或目录)

请问这是什么情况导致的?

在线debug功能查看到的加载类不全

比如 java 库中的 Integer 、String 类都看不到加载,程序的源码类也都看不到
Thread Dump 里的信息确认完整。堆对象统计信息确认完整。
请问是哪里出了问题,多谢

BTW , great job!

启动不了

image
想问一下,这个脚本是怎么修改呢?路径改了之后运行就变成这个样子了

配置后不能查看监控信息

点击查看,出现一个警告,一个错误:
没有配置private token,代码查看仅可通过反编译

Agent error: java.lang.IllegalStateException---can not init bistoury, start arthas error, pid [9048],Agent JAR loaded but agent failed to initialize

还有什么配置的地方吗?

agent连接proxy超时

启动./quick_start.sh -p 10684 start 时,agent.out 抛出TimeoutException:
java.util.concurrent.TimeoutException: Request timed out to /127.0.0.1:9090 of 3000 ms

应用部署在同一服务器。
好像是agent 启动 bistoury netty client 请求proxy for agent config 时proxy还未启动完成

建议增加支持JFR的功能

jdk8u40之后已经支持通过jcmd动态开启、停止、导出JFR的功能,建议bistoury增加支持,这样就不用自己登录服务器去查pid、开启、停止、dump这么繁琐的操作了

启动报错!!!!请教咋回事呢

版本:bistoury-2.0.6-quick-start.tar.gz
环境:Ubuntu 16.04.2 LTS \n \l java version "1.8.0_101",启动报错
./quick_start.sh: 84: ./quick_start.sh: [[: not found
./quick_start.sh: 88: ./quick_start.sh: [[: not found
./quick_start.sh: 93: ./quick_start.sh: [[: not found
./quick_start.sh: 97: ./quick_start.sh: [[: not found
./quick_start.sh: 103: ./quick_start.sh: [[: not found
命令格式错误,Usage: [./quick_start.sh -p pid -j java_home start] or [./quick_start.sh stop]
加上java_home 同样错误

java.lang.IllegalArgumentException: Process not found

在浏览器中返问 bistoury ui 项目的时候,出现如下错误
Agent error: java.lang.RuntimeException---java.lang.RuntimeException:
Cannot perf data for process 1000 - java.lang.IllegalArgumentException: Process not found

我系统是ubuntu,我启动的命令是bash quick_start.sh -p1000 start
直接使用quick_start.sh start会报如下错误
➜ bistoury bash quick_start.sh start
没有指定-c参数,agent将通过org.springframework.web.servlet.DispatcherServlet获取应用jar包路径

部署问题

您好,有没有详细的,流程化的部署文档(生产部署),有些参数不知道是配置还是不配置。。。。

maven 打包失败

[ERROR] Failed to execute goal on project bistoury-common: Could not resolve dependencies for project qunar.tc.bistoury:bistoury-common:jar:2.0.6: Failed to collect dependencies at com.google.guava:guava:jar:20.0: Failed to read artifact descriptor for com.google.guava:guava:jar:20.0: Could not transfer artifact com.google.guava:guava:pom:20.0 from/to central (https://repo.maven.apache.org/maven2): Transfer failed for https://repo.maven.apache.org/maven2/com/google/guava/guava/20.0/guava-20.0.pom: Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.52.215] failed: Connection refused (Connection refused) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn -rf :bistoury-common
================ building bistoury proxy finished ================

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.