【问题标题】:How can i check if MySQL and Tomcat are running?如何检查 MySQL 和 Tomcat 是否正在运行?
【发布时间】:2011-03-29 05:15:13
【问题描述】:

我创建了一个 Java 应用程序,它被分成不同的子组件,每个子组件都运行在一个单独的 Tomcat 实例上。此外,一些组件通过 Hibernate 使用 MySQL db。

我现在正在创建一个管理控制台,它报告了我所有的 Tomcat 实例和 MySQL 的状态。我不需要详细信息,但知道它们是否正在运行就足够了。

最好的解决方案是什么?

谢谢

【问题讨论】:

    标签: java mysql tomcat administration


    【解决方案1】:

    最直接的方法是连接服务器,看看它是否成功。

    MySQL:

    Connection connection = null;
    try {
        connection = DriverManager.getConnection(url, username, password);
        // Succes!
    } catch (SQLException e) {
        // Fail!
    } finally {
        if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
    }
    

    雄猫:

    try {
        new URL(url).openConnection().connect();
        // Succes!
    } catch (IOException e) {
        // Fail!
    }
    

    如果您想要更具体的状态,例如检查某个 DB 表是否可用或特定的 webapp 资源是否可用,然后您必须分别触发更具体的 SELECT 语句或 HTTP 请求。

    【讨论】:

      【解决方案2】:

      我假设您事先知道哪些端口正在运行(或从配置文件中)。最简单的检查方法是像 telnet 程序那样对这些端口进行套接字连接。比如:

      public boolean isServerUp(int port) {
          boolean isUp = false;
          try {
              Socket socket = new Socket("127.0.0.1", port);
              // Server is up
              isUp = true;
              socket.close();
          }
          catch (IOException e)
          {
              // Server is down
          }
          return isUp;
      }
      

      用法:

      isTomcatUp = isServerUp(8080);
      isMysqlUp = isServerUp(3306);
      

      但是,我会说这是一个假阴性检查。有时它说服务器已启动,但服务器卡住或没有响应...

      【讨论】:

        【解决方案3】:

        我会确保你设置的监控实际上是在执行一些代码。事后通过 jmx 监控 JVM 也很有帮助。查看http://www.cacti.net/

        【讨论】:

          【解决方案4】:

          通过 MySQL 触发一个简单的固定查询

          SELECT 'a-ok';
          

          并让 .jsp 返回 a-ok 文本。如果它超时和/或没有回复a-ok,那么有些问题。如果您需要更详细的内容,可以添加额外的检查,例如请求 now() 或更大的内容,例如 SHOW INNODB STATUS

          【讨论】:

          • 我认为 OP 需要澄清管理控制台是 GUI 还是 Web 应用程序。如果它是一个 Web 应用程序并且托管服务器已关闭,则 JSP 将不会这样做。
          • 是的,但是无论做什么,ping 都可能超时并报告服务器已关闭。我使用 wget 和这种类型的往返查询脚本监控我的服务器。
          【解决方案5】:

          最简单的方法是查找 MySQL 和 Tomcat PID 文件。您需要查看启动脚本以确保确切位置,但一旦找到,您只需测试 pid 文件是否存在。

          【讨论】:

          • 但是如果 Apache 和/或 Tomcat 死了并且没有自行清理怎么办?由于周围存在陈旧的 pid 文件,您会得到一个误报“up”。
          • 或者如果 MySQL 或 Tomcat 进程仍然存在,但由于某种原因它们停止响应请求怎么办?
          【解决方案6】:

          创建一个 servlet 作为状态页面。在 servlet 中执行廉价查询,如果查询成功则让 servlet 打印 OK,否则错误。将 servlet 放入战争并将其部署到所有实例。

          这可用于通过对所有实例进行循环来检查您的管理控制台。

          【讨论】:

            【解决方案7】:

            我将创建一个简单的 REST Web 服务,该服务在每个 Tomcat 实例上运行并对数据库进行无操作查询。这使得从任何地方(命令行、Web 应用程序、GUI 应用程序等)驱动都很容易

            如果这些是公开可用的服务器,您可以使用 binarycanary.com 之类的服务来轮询您应用中的页面或服务。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-05-04
              • 2022-12-03
              • 2017-10-14
              • 2016-10-21
              • 2016-02-07
              • 1970-01-01
              相关资源
              最近更新 更多