fla*_*ode 3 tomcat rhel5 strace
运行 ltrace 并非易事。这个 RHEL 5.3 系统基于 Tomcat Catalina(servlet 容器),它使用文本脚本将所有内容联系在一起。当我试图在这里找到一个可执行文件时,我陷入了困境:
/etc/init.d/pki-ca9 调用 dtomcat5-pki-ca9
#Path to the tomcat launch script (direct don't use wrapper)
TOMCAT_SCRIPT=/usr/bin/dtomcat5-pki-ca9
Run Code Online (Sandbox Code Playgroud)
/usr/bin/dtomcat5-pki-ca9 调用看门狗程序
/usr/bin/nuxwdog -f $FNAME
Run Code Online (Sandbox Code Playgroud)
我用包装器替换了 nuxwdog
[root@qantas]# cat /usr/bin/nuxwdog
#!/bin/bash
ltrace -e open -o /tmp/ltrace.$(date +%s) /usr/bin/nuxwdog.bak $@
[root@qantas]# service pki-ca9 start
Starting pki-ca9: [ OK ]
[root@qantas]# cat /tmp/ltrace.1295036985
+++ exited (status 1) +++
Run Code Online (Sandbox Code Playgroud)
这是丑陋的。如何在 tomcat 中运行 strace 或 ltrace?
更新
这是tomcat的“进程”
[root@qantas]# ps -ef | grep tomcat
pkiuser 21767 21766 0 10:10 ? 00:00:09 /usr/lib/jvm/jre/bin/java
-Djava.endorsed.dirs=/usr/share/tomcat5/common/endorsed
-classpath :/usr/lib/jvm/jre/lib/rt.jar:/usr/share/java/commons-
collections.jar:/usr/share/tomcat5/bin/bootstrap.jar:/usr/share/tomcat5/bin/commons-
logging-api.jar:/usr/share/java/mx4j/mx4j-impl.jar:/usr/share/java/mx4j/mx4j-
jmx.jar:/usr/share/tomcat5/common/lib/nuxwdog.jar -Dcatalina.base=/var/lib/pki-ca11
-Dcatalina.home=/usr/share/tomcat5 -Djava.io.tmpdir=/usr/share/tomcat5/temp
org.apache.catalina.startup.Bootstrap start
Run Code Online (Sandbox Code Playgroud)
这里是所有的孩子
[root@qantas]# pstree -A -p 21767
java(21767)-+-{java}(21768)
|-{java}(21769)
|-{java}(21770)
<..snip..>
`-{java}(22104)
Run Code Online (Sandbox Code Playgroud)
这就是我尝试在文本脚本上启动 ltrace 时发生的情况
[root@qantas]# ltrace /usr/bin/dtomcat5-pki-ca11
ltrace: Can't open ELF file "/usr/bin/dtomcat5-pki-ca11"
Run Code Online (Sandbox Code Playgroud)
当我将 ltrace 附加到父项并让它运行一天时,没有输出
[root@qantas]# ltrace -e open -o /tmp/ltrace.1295465058 -p 21767
...24 hours later...
[root@qantas]# ls -l /tmp/ltrace.1295465058
-rw-r--r-- 1 root root 0 Jan 19 11:24 /tmp/ltrace.1295465058
Run Code Online (Sandbox Code Playgroud)
除非您需要在启动过程中跟踪某些内容,strace
并且ltrace
两者都有一个-p
附加到现有进程并开始跟踪它的参数。一旦 tomcat 运行,您将从中获取进程 ID ps
,然后运行
strace -p 1234 -e open -o outputfile
Run Code Online (Sandbox Code Playgroud)
或者
ltrace -p 1234 -e open -o outputfile
Run Code Online (Sandbox Code Playgroud)
其中 1234 是进程 ID。
另一个选项,如果这些“文本文件”是 shell 脚本,你应该能够
strace -f -e whatever -o whatever start-tomcat.sh
Run Code Online (Sandbox Code Playgroud)
strace 将开始跟踪为运行脚本而执行的 shell,-f 将告诉它在 fork 和执行每个命令时跟随它。您需要过滤输出以找出哪个进程是哪个程序(使用-ff
而不是-f
将有帮助)。
归档时间: |
|
查看次数: |
6351 次 |
最近记录: |