6

我对 Tomcat 很陌生,刚刚用 jprofiler 配置了我的 tomcat。但是现在无法停止 tomcat 服务器,收到以下错误消息。

[root@localhost bin]# service tomcat stop 
Stopping .
Using CATALINA_BASE:   /data/applications/apache-tomcat-6.0.26
Using CATALINA_HOME:   /data/applications/apache-tomcat-6.0.26
Using CATALINA_TMPDIR: /data/applications/apache-tomcat-6.0.26/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0
Using CLASSPATH:       /data/applications/apache-tomcat-6.0.26/bin/bootstrap.jar
JProfiler> Protocol version 35
JProfiler> Using JVMTI
JProfiler> JVMTI version 1.1 detected.
JProfiler> 32-bit library
JProfiler> Listening on port: 8849.
JProfiler> Instrumenting native methods.
JProfiler> Can retransform classes.
JProfiler> Can retransform any class.
JProfiler> Native library initialized
JProfiler> VM initialized
JProfiler> Waiting for a connection from the JProfiler GUI ...
JProfiler> ERROR: Could not bind socket.
\n\nTomcat has shutdown

我不确定我的配置有什么问题,是的,盒子上禁用了防火墙。

[root@localhost bin]# service iptables status
Firewall is stopped.
4

3 回答 3

9

为了找到 tomcat PID 运行:

ps -ef | grep tomcat

然后使用这个命令:

kill -9 PID

或者在一个命令中:

kill -9 $(ps -ef | grep tomcat | grep -v "grep" | awk '{print $2}')

另一件事,你可能有一个看门狗在运行,它不断让 tomcat 重新启动——在这种情况下,你也想关闭(或杀死)看门狗

于 2012-08-08T19:11:12.057 回答
0

您已在 tomcat 脚本中插入用于加载 JProfiler 代理的 VM 参数。JProfiler 代理希望能够侦听特定端口(默认为 8849)上的传入连接。该端口已被正在运行的 Tomcat 使用。再次启动 tomcat 脚本时,JVM 初始化失败,因为无法初始化 profiling agent。

您必须-agentlib:[path to jprofilerti.dll]从您的 tomcat 启动脚本中删除 JVM 参数或使其有条件,以便它不适用于“停止”命令。

于 2012-08-09T13:26:14.410 回答
0

根据 Tomcat 文档,您可以定义一个 PID 文件,该文件应该存储 Tomcat 的进程 ID。

  1. 在 Tomcat bin 目录中创建一个 shell 脚本“setenv.sh”。
  2. 该文件在 catalina.sh 中被引用,因此它应该具有完全相同的名称。
  3. 您可以在“setenv.sh”中获取 tomcat pid 信息。像下面的东西..

    #!/bin/bash CATALINA_PID="$CATALINA_BASE/bin/catalina.pid"

  4. 通过上述步骤,tomcat 将在其 bin 目录中查找名为“catalina.pid”的文件。所以只需创建它。

你完成了。只是不要忘记使用 -force 选项停止 tomcat。

./shutdown.sh -force

force 选项告诉 tomcat 通过 PID 杀死 tomcat,如果它不能在给定时间内停止。

于 2016-09-08T18:28:36.973 回答