Skip to content
This repository has been archived by the owner on Mar 14, 2019. It is now read-only.

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

Open
atonce opened this issue Jun 21, 2012 · 19 comments
Labels

Comments

@atonce
Copy link

atonce commented Jun 21, 2012

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

@atonce
Copy link
Author

atonce commented Jun 21, 2012

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

@zhongl
Copy link
Member

zhongl commented Jun 21, 2012

感谢提交!

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

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
Copy link
Author

atonce commented Jun 21, 2012

关于字母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
Copy link
Member

zhongl commented Jun 21, 2012

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

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

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

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

@atonce
Copy link
Author

atonce commented Jun 21, 2012

关于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
Copy link
Author

atonce commented Jun 21, 2012

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

@atonce
Copy link
Author

atonce commented Jun 21, 2012

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

@zhongl
Copy link
Member

zhongl commented Jun 21, 2012

方便的话, 请加下我的Gtalk: [email protected], 提升以下沟通效率。

在 2012年6月21日 下午2:47,atonce <
[email protected]

写道:

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


Reply to this email directly or view it on GitHub:
#55 (comment)

zhongl

@atonce
Copy link
Author

atonce commented Jun 21, 2012

不好意思,没有用过gtalk

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

------------------ 原始邮件 ------------------
发件人: "Lunfu Zhong"[email protected];
发送时间: 2012年6月21日(星期四) 下午2:53
收件人: "atonce"[email protected];

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

方便的话, 请加下我的Gtalk: [email protected], 提升以下沟通效率。

在 2012年6月21日 下午2:47,atonce <
[email protected]

写道:

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


Reply to this email directly or view it on GitHub:
#55 (comment)

zhongl


Reply to this email directly or view it on GitHub:
#55 (comment)

@atonce
Copy link
Author

atonce commented Jun 21, 2012

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

@zhongl
Copy link
Member

zhongl commented Jun 21, 2012

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

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

cmd是指什么?

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

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

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

@zhongl
Copy link
Member

zhongl commented Jun 21, 2012

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

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

@atonce
Copy link
Author

atonce commented Jun 21, 2012

我的自己的机器是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)

2 similar comments
@atonce
Copy link
Author

atonce commented Jun 21, 2012

我的自己的机器是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
Copy link
Author

atonce commented Jun 21, 2012

我的自己的机器是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
Copy link
Author

atonce commented Jun 21, 2012

我的自己的机器是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:
#55 (comment)

@zhongl
Copy link
Member

zhongl commented Jun 21, 2012

囧, 好吧, 我土了。

在SunOS下也是通过telnet吗?

@atonce
Copy link
Author

atonce commented Jun 21, 2012

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

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

真bt,给你添麻烦了

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

------------------ 原始邮件 ------------------
发件人: "Lunfu Zhong"[email protected];
发送时间: 2012年6月21日(星期四) 下午3:50
收件人: "atonce"[email protected];

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

囧, 好吧, 我土了。

在SunOS下也是通过telnet吗?


Reply to this email directly or view it on GitHub:
#55 (comment)

@zhongl
Copy link
Member

zhongl commented Jun 21, 2012

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

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

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

2 participants