【问题标题】:Grails 2.3.0 Tomcat process lives after Grails application is killedGrails 应用程序被杀死后 Grails 2.3.0 Tomcat 进程仍然存在
【发布时间】:2013-10-11 19:54:37
【问题描述】:

我在使用 Grails 2.3.0 时遇到了几个非常烦人的问题,其中最烦人的是当我杀死我的 Grails 应用程序时 Tomcat 拒绝死掉。如果我从命令行或 GGTS 运行我的 Grails 应用程序似乎并不重要,当我停止我的 Grails 应用程序时,Tomcat 不会死,所以下次我尝试运行我的 Grails 应用程序时,我会收到以下警告:

| Error Server failed to start for port 8080: Address already in use: JVM_Bind (Use --stacktrace to see the full trace)

我必须去寻找 Tomcat 的进程并手动终止它以释放端口。

我安装了 XAMPP,但是 XAMPP 附带的 Tomcat 安装没有运行。我重命名了 XMAPP Tomcat 目录以确保。奇怪的是,当我运行 Grails 应用程序时,XAMPP 控制面板显示 Tomcat 已启动(尽管停止按钮不起作用)。

【问题讨论】:

  • 你是如何停止你的应用程序的?你试过grails stop-app吗?
  • 我只是用CTRL + C杀死它

标签: tomcat grails


【解决方案1】:

XAMP 带有一个 Apache http 服务器 而不是 Tomcat,它的停止按钮不会杀死您的 Grails 应用程序。它可能显示为已启动,因为它检查 http://localhost:8080/ 是否在线,但它不验证 localhost 是否来自 XAMP 或其他服务器。

尝试使用GGTS 中的红色按钮杀死应用程序确实会失败,为此有一张 JIRA 票。同时,正确的流程是运行stop-app 命令(ctrl+alt+shift+g)。

【讨论】:

  • 太棒了,你有 JIRA 问题的链接吗?
【解决方案2】:

我是一个没有耐心的人,在打开一个新控制台并使用stop-app 命令确实有效时,它的运行速度不够快。我制作了这个小批处理文件来加快速度,直到它得到修复。这个批处理文件会找到绑定到 8080 端口的进程并杀死它。

@echo off
for /f "delims=" %%a in ('netstat -aon ^| find ":8080"') do @set netstatRslt=%%a
set pid=%netstatRslt:~-5%
taskkill /f /pid %pid%

【讨论】:

    【解决方案3】:

    我发现您的代理设置会影响“停止应用”关闭 tomcat 的能力。当你运行 'run-app' 时,grails 还会监听服务器端口 + 1(通常是 8081)。对该端口的任何请求都会导致服务器关闭。 'stop-app' 脚本只是向该端口发出请求。

    在我的例子中,我使用了“add-proxy”命令来配置我的代理,但我没有添加“--noproxy=localhost”参数。我假设当我运行 stop-app 时,它试图通过代理访问 localhost:8081 并失败,因此服务器没有关闭。一旦我将'--noproxy = localhost'添加到我的代理配置停止应用程序工作正常。

    这也意味着当您在 grails> 提示符下按 Ctrl+C 时,tomcat 将关闭。

    【讨论】:

      猜你喜欢
      • 2020-10-23
      • 1970-01-01
      • 2013-09-19
      • 2012-01-21
      • 1970-01-01
      • 2012-08-07
      • 2020-05-11
      • 1970-01-01
      • 2015-05-15
      相关资源
      最近更新 更多