CSUG / HouseMD

HouseMD is an awesome diagnosing tool better than BTrace
http://csug.github.io/HouseMD/
Apache License 2.0
700 stars 218 forks source link

如果需要监控的类或者方法里含有u字母,则会自动匹配到quit命令 退出 #55

Open atonce opened 12 years ago

atonce commented 12 years ago

假设我要监控某一个一个类明为Subs 如果输入了trace Su,就会自动激活quit,退出housemd

atonce commented 12 years ago

如果监控的对象的属性是String类型,则无法显示其值 inspect Subs.subsCode subsCode跳过trace -d Subs是可以看到其又被赋值,但是inspect却看不到其值

zhongl commented 12 years ago

感谢提交!

能否提供上述两个场景下控制台的字符显示内容呢? 请不要截图, 复制粘贴文本就好, 例如:

housemd> trace -t 2 TraceTarget$A.m
INFO : probe class TraceTarget$A
TraceTarget$A.m(int, String)    TraceTarget$CL@42719c            0            -ms    null
TraceTarget$A.m(String)         TraceTarget$CL@42719c            2            3ms    TraceTarget$A@401369

TraceTarget$A.m(int, String)    TraceTarget$CL@42719c            0            -ms    null
TraceTarget$A.m(String)         TraceTarget$CL@42719c            4            1ms    TraceTarget$A@401369

INFO : Ended by timeout
INFO : reset class TraceTarget$A
atonce commented 12 years ago

关于字母u(小写)的问题:

[vsop@es86app1:/export/home/vsop]$ housemd 20266 INFO : load agent /export/home/vsop/housemd-assembly-0.2.2.jar INFO : options: INFO : /export/home/vsop/housemd-assembly-0.2.2.jar INFO : com.github.zhongl.housemd.duck.Telephone INFO : 54321 INFO : com.github.zhongl.housemd.command.Trace INFO : com.github.zhongl.housemd.command.Loaded INFO : com.github.zhongl.housemd.command.Env INFO : com.github.zhongl.housemd.command.Inspect INFO : connection established on 54321 housemd> loaded Squit

No matched class ERROR: connection breaked causeby ERROR: java.io.IOException: 连接被对等方复位 (errno:232) ERROR: You can get more details in /tmp/housemd.err.20266 com.github.zhongl.housemd.house.Mobilephone@1976011: caught java.lang.IllegalSta teException: Shutdown in progress java.lang.IllegalStateException: Shutdown in progress at java.lang.ApplicationShutdownHooks.remove(ApplicationShutdownHooks.ja va:55) at java.lang.Runtime.removeShutdownHook(Runtime.java:220) at scala.sys.ShutdownHookThread.remove(ShutdownHookThread.scala:19) at com.github.zhongl.housemd.house.Mobilephone$$anonfun$act$1$$anonfun$a pply$1.apply(MobilePhone.scala:77) at com.github.zhongl.housemd.house.Mobilephone$$anonfun$act$1$$anonfun$a pply$1.apply(MobilePhone.scala:68) at scala.actors.ReactorTask.run(ReactorTask.scala:31) at scala.actors.Reactor$class.resumeReceiver(Reactor.scala:129) at com.github.zhongl.housemd.house.Mobilephone.scala$actors$ReplyReactor $$super$resumeReceiver(MobilePhone.scala:35) at scala.actors.ReplyReactor$class.resumeReceiver(ReplyReactor.scala:68) at com.github.zhongl.housemd.house.Mobilephone.resumeReceiver(MobilePhon e.scala:35) at scala.actors.Actor$class.searchMailbox(Actor.scala:500) at com.github.zhongl.housemd.house.Mobilephone.searchMailbox(MobilePhone .scala:35) at scala.actors.Reactor$$anonfun$startSearch$1$$anonfun$apply$mcV$sp$1.a pply$mcV$sp(Reactor.scala:117) at scala.actors.Reactor$$anonfun$startSearch$1$$anonfun$apply$mcV$sp$1.a pply(Reactor.scala:114) at scala.actors.Reactor$$anonfun$startSearch$1$$anonfun$apply$mcV$sp$1.a pply(Reactor.scala:114) at scala.actors.ReactorTask.run(ReactorTask.scala:33) at scala.actors.threadpool.ThreadPoolExecutor.runWorker(Unknown Source) at scala.actors.threadpool.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Thread.java:662)

而且出错后进程挂死掉了,不能quit或者ctr+d退出

只有杀掉该housemd进程,重新开一个cmd窗口连接上去

zhongl commented 12 years ago

每次执行同样的命令都会出现这样的现象吗?

产生这个直接退出的问题, 有规律呢, 还是很随机的?

根据你提供的异常堆栈信息, 我结合代码的判断是:

并非字母u会被转换成quit(这我已经验证), 而是 HouseMD的进程的ShutdownHook被触发了, 请确定你的环境中是否有其他人为或自动的行为在kill你启动的HouseMD

atonce commented 12 years ago

关于null的问题: 我前端浏览器传入到action中,仅做了一次查询,所有的参数和场景都是一致的(只是时间点不一致,一次为了 trace 一次做inspect)

这个是inspect的记录: INFO : Ended by overlimit INFO : Reset class com.eshore.vsop.dao.model.PartnerParam housemd> inspect -i 10 -t 60 -l 6 PartnerParam.partnerCode INFO : Probe class com.eshore.vsop.dao.model.PartnerParam PartnerParam.partnerCode null com.eshore.vsop.dao.model.PartnerParam@142c9ed weblogic.utils .classloaders.ChangeAwareClassLoader@1894800 finder: weblogic.utils.classloaders.CodeGenCla ssFinder@fd899 annotation: vsop@vsop

INFO : Ended by overlimit INFO : Reset class com.eshore.vsop.dao.model.PartnerParam

这个是trace -d的日志文件:

2012-06-21 14:31:41 0ms [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (s elf-tuning)'] com.eshore.vsop.dao.model.PartnerParam@179344a com/eshore/vsop/dao/model/Part nerParam.clear [] void 2012-06-21 14:31:41 1ms [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (s elf-tuning)'] com.eshore.vsop.dao.model.PartnerParam@179344a com/eshore/vsop/dao/model/Part nerParam. [] void 2012-06-21 14:31:41 0ms [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (s elf-tuning)'] com.eshore.vsop.dao.model.PartnerParam@179344a com/eshore/vsop/dao/model/Part nerParam.setPartnerCode [test] void 2012-06-21 14:31:41 0ms [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (s elf-tuning)'] com.eshore.vsop.dao.model.PartnerParam@179344a com/eshore/vsop/dao/model/Part nerParam.getPartnerCode [] test 2012-06-21 14:31:41 0ms [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (s elf-tuning)'] com.eshore.vsop.dao.model.PartnerParam@179344a com/eshore/vsop/dao/model/Part nerParam.getPartnerCode [] test 2012-06-21 14:31:41 0ms [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (s elf-tuning)'] com.eshore.vsop.dao.model.PartnerParam@179344a com/eshore/vsop/dao/model/Part nerParam.setPartnerCodeLikeRange [%test%] void

atonce commented 12 years ago

每次都出现 我在cmd中telnet和fterm中都试了,每次都如此,不是随机出现的 也不会有人杀进程

atonce commented 12 years ago

以上测试主机的操作系统是HP UNIX

zhongl commented 12 years ago

方便的话, 请加下我的Gtalk: zhong.lunfu@gmail.com, 提升以下沟通效率。

在 2012年6月21日 下午2:47,atonce < reply@reply.github.com

写道:

每次都出现 我在cmd中telnet和fterm中都试了,每次都如此,不是随机出现的 也不会有人杀进程


Reply to this email directly or view it on GitHub: https://github.com/zhongl/HouseMD/issues/55#issuecomment-6475370

zhongl

atonce commented 12 years ago

不好意思,没有用过gtalk

上班时间,也不能用即时通工具

------------------ 原始邮件 ------------------ 发件人: "Lunfu Zhong"reply@reply.github.com; 发送时间: 2012年6月21日(星期四) 下午2:53 收件人: "atonce"281099014@qq.com;

主题: Re: [HouseMD] 如果需要监控的类或者方法里含有u字母,则会自动匹配到quit命令 退出 (#55)

方便的话, 请加下我的Gtalk: zhong.lunfu@gmail.com, 提升以下沟通效率。

在 2012年6月21日 下午2:47,atonce < reply@reply.github.com

写道:

每次都出现 我在cmd中telnet和fterm中都试了,每次都如此,不是随机出现的 也不会有人杀进程


Reply to this email directly or view it on GitHub: https://github.com/zhongl/HouseMD/issues/55#issuecomment-6475370

zhongl


Reply to this email directly or view it on GitHub: https://github.com/zhongl/HouseMD/issues/55#issuecomment-6475447

atonce commented 12 years ago

重新在 SunOS 5.10上测试了下,没有出现刚才‘u’自动退出的问题,跟操作系统有关系

zhongl commented 12 years ago

每次都出现 我在cmd中telnet和fterm中都试了,每次都如此

这句话有点笼统, 每次是指进入housemd>后, 第一次输入命令就出现上面的异常退出了吗? 不是的话, 能够细致的说明一下, 方便我分析问题

cmd是指什么?

我能想到的HouseMD使用场景应该不需要telnet以及fterm参与。

能麻烦你详细描述你的操作的步骤吗?

貌似你要跟踪的进程是Weblogic, 然后又是HP Unix, 我恐怕很难模拟你的场景, 所以更多操作步骤和系统信息, 会对我分析这个问题原因很有帮助,谢谢:)

zhongl commented 12 years ago

重新在 SunOS 5.10上测试了下,没有出现刚才‘u’自动退出的问题,跟操作系统有关系

我到觉得JDK的版本会是个嫌疑最大的对象, 我测试过Open jdkSun jdk.

atonce commented 12 years ago

我的自己的机器是windows xp cmd就是指 dos命令行界面输入telnet操作登录到远程服务器上,执行housemd(一个sh脚本)内容是: [vsop@es86app1:/export/home/vsop]$ more housemd java -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar -jar housemd-assembly-0.2.2.jar $1

执行监控命令: [vsop@es86app1:/export/home/vsop]$ housemd 20266 INFO : load agent /export/home/vsop/housemd-assembly-0.2.2.jar INFO : options: INFO : /export/home/vsop/housemd-assembly-0.2.2.jar INFO : com.github.zhongl.housemd.duck.Telephone INFO : 54321 INFO : com.github.zhongl.housemd.command.Trace INFO : com.github.zhongl.housemd.command.Loaded INFO : com.github.zhongl.housemd.command.Env INFO : com.github.zhongl.housemd.command.Inspect INFO : connection established on 54321 housemd>

housemd> loaded Squit

bNo matched class housemd> quit

INFO : bye [vsop@es86app1:/export/home/vsop]$ b

这个是hpunix的java: [vsop@es86app1:/tmp/trace/20266@es86app1]$ java -version java version "1.6.0.10" Java(TM) SE Runtime Environment (build 1.6.0.10-jinteg_11_mar_2011_09_19-b00) Java HotSpot(TM) Server VM (build 19.1-b02-jinteg:2011mar11-07:33, mixed mode)

这个是sunos的java: -bash-3.00$ java -version java version "1.6.0_12" Java(TM) SE Runtime Environment (build 1.6.0_12-b04) Java HotSpot(TM) Server VM (build 11.2-b01, mixed mode)

atonce commented 12 years ago

我的自己的机器是windows xp cmd就是指 dos命令行界面输入telnet操作登录到远程服务器上,执行housemd(一个sh脚本)内容是: [vsop@es86app1:/export/home/vsop]$ more housemd java -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar -jar housemd-assembly-0.2.2.jar $1

执行监控命令: [vsop@es86app1:/export/home/vsop]$ housemd 20266 INFO : load agent /export/home/vsop/housemd-assembly-0.2.2.jar INFO : options: INFO : /export/home/vsop/housemd-assembly-0.2.2.jar INFO : com.github.zhongl.housemd.duck.Telephone INFO : 54321 INFO : com.github.zhongl.housemd.command.Trace INFO : com.github.zhongl.housemd.command.Loaded INFO : com.github.zhongl.housemd.command.Env INFO : com.github.zhongl.housemd.command.Inspect INFO : connection established on 54321 housemd>

housemd> loaded Squit

bNo matched class housemd> quit

INFO : bye [vsop@es86app1:/export/home/vsop]$ b

这个是hpunix的java: [vsop@es86app1:/tmp/trace/20266@es86app1]$ java -version java version "1.6.0.10" Java(TM) SE Runtime Environment (build 1.6.0.10-jinteg_11_mar_2011_09_19-b00) Java HotSpot(TM) Server VM (build 19.1-b02-jinteg:2011mar11-07:33, mixed mode)

这个是sunos的java: -bash-3.00$ java -version java version "1.6.0_12" Java(TM) SE Runtime Environment (build 1.6.0_12-b04) Java HotSpot(TM) Server VM (build 11.2-b01, mixed mode)

atonce commented 12 years ago

我的自己的机器是windows xp cmd就是指 dos命令行界面输入telnet操作登录到远程服务器上,执行housemd(一个sh脚本)内容是: [vsop@es86app1:/export/home/vsop]$ more housemd java -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar -jar housemd-assembly-0.2.2.jar $1

执行监控命令: [vsop@es86app1:/export/home/vsop]$ housemd 20266 INFO : load agent /export/home/vsop/housemd-assembly-0.2.2.jar INFO : options: INFO : /export/home/vsop/housemd-assembly-0.2.2.jar INFO : com.github.zhongl.housemd.duck.Telephone INFO : 54321 INFO : com.github.zhongl.housemd.command.Trace INFO : com.github.zhongl.housemd.command.Loaded INFO : com.github.zhongl.housemd.command.Env INFO : com.github.zhongl.housemd.command.Inspect INFO : connection established on 54321 housemd>

housemd> loaded Squit

bNo matched class housemd> quit

INFO : bye [vsop@es86app1:/export/home/vsop]$ b

这个是hpunix的java: [vsop@es86app1:/tmp/trace/20266@es86app1]$ java -version java version "1.6.0.10" Java(TM) SE Runtime Environment (build 1.6.0.10-jinteg_11_mar_2011_09_19-b00) Java HotSpot(TM) Server VM (build 19.1-b02-jinteg:2011mar11-07:33, mixed mode)

这个是sunos的java: -bash-3.00$ java -version java version "1.6.0_12" Java(TM) SE Runtime Environment (build 1.6.0_12-b04) Java HotSpot(TM) Server VM (build 11.2-b01, mixed mode)

atonce commented 12 years ago

我的自己的机器是windows xp cmd就是指 dos命令行界面输入telnet操作登录到远程服务器上,执行housemd(一个sh脚本)内容是: [vsop@es86app1:/export/home/vsop]$ more housemd java -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar -jar housemd-assembly-0.2.2.jar $1

执行监控命令: [vsop@es86app1:/export/home/vsop]$ housemd 20266 INFO : load agent /export/home/vsop/housemd-assembly-0.2.2.jar INFO : options: INFO : /export/home/vsop/housemd-assembly-0.2.2.jar INFO : com.github.zhongl.housemd.duck.Telephone INFO : 54321 INFO : com.github.zhongl.housemd.command.Trace INFO : com.github.zhongl.housemd.command.Loaded INFO : com.github.zhongl.housemd.command.Env INFO : com.github.zhongl.housemd.command.Inspect INFO : connection established on 54321 housemd>

housemd> loaded Squit

bNo matched class housemd> quit

INFO : bye [vsop@es86app1:/export/home/vsop]$ b

这个是hpunix的java: [vsop@es86app1:/tmp/trace/20266@es86app1]$ java -version java version "1.6.0.10" Java(TM) SE Runtime Environment (build 1.6.0.10-jinteg_11_mar_2011_09_19-b00) Java HotSpot(TM) Server VM (build 19.1-b02-jinteg:2011mar11-07:33, mixed mode)

这个是sunos的java: -bash-3.00$ java -version java version "1.6.0_12" Java(TM) SE Runtime Environment (build 1.6.0_12-b04) Java HotSpot(TM) Server VM (build 11.2-b01, mixed mode)

主题: Re: [HouseMD] 如果需要监控的类或者方法里含有u字母,则会自动匹配到quit命令 退出 (#55)

每次都出现 我在cmd中telnet和fterm中都试了,每次都如此

这句话有点笼统, 每次是指进入housemd>后, 第一次输入命令就出现上面的异常退出了吗? 不是的话, 能够细致的说明一下, 方便我分析问题

cmd是指什么?

我能想到的HouseMD使用场景应该不需要telnet以及fterm参与。

能麻烦你详细描述你的操作的步骤吗?

貌似你要跟踪的进程是Weblogic, 然后又是HP Unix, 我恐怕很难模拟你的场景, 所以更多操作步骤和系统信息, 会对我分析这个问题原因很有帮助,谢谢:)


Reply to this email directly or view it on GitHub: https://github.com/zhongl/HouseMD/issues/55#issuecomment-6475998

zhongl commented 12 years ago

囧, 好吧, 我土了。

在SunOS下也是通过telnet吗?

atonce commented 12 years ago

hp和sun,我都有cmd telnet和fterm 2种方式测试

现在测试 我之前提到的 类的字符串属性为null,在sunos也不为空了

真bt,给你添麻烦了

我后面有时间再测试下Redhat linux

------------------ 原始邮件 ------------------ 发件人: "Lunfu Zhong"reply@reply.github.com; 发送时间: 2012年6月21日(星期四) 下午3:50 收件人: "atonce"281099014@qq.com;

主题: Re: [HouseMD] 如果需要监控的类或者方法里含有u字母,则会自动匹配到quit命令 退出 (#55)

囧, 好吧, 我土了。

在SunOS下也是通过telnet吗?


Reply to this email directly or view it on GitHub: https://github.com/zhongl/HouseMD/issues/55#issuecomment-6476234

zhongl commented 12 years ago

哪里话, 你都为HouseMD做了两个操作系统的平台级测试了, 我应该感谢你的:)

只可惜 我手上没有这样资源, 有点无能为力阿, 囧。

期待你后续的反馈, 多多感谢了!