我如何检查MySQL和Tomcat是否正在运行?

时间:2010-08-12 23:28:48

标签: java mysql tomcat administration

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

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

这可能是最好的解决方案吗?

由于

7 个答案:

答案 0 :(得分:4)

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

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) {}
}

Tomcat的:

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

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

答案 1 :(得分:3)

我假设您知道其端口正在运行(或从配置文件中)。最简单的检查方法是像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);

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

答案 2 :(得分:1)

我会确保监控您设置的内容实际上是在运行一些代码。事后,通过jmx监视JVM也会有所帮助。查看http://www.cacti.net/

答案 3 :(得分:0)

通过MySQL解决一个简单的固定查询

SELECT 'a-ok';

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

我将创建一个在每个Tomcat实例上运行的简单REST Web服务,并对数据库执行无操作查询。这使得从任何地方(命令行,Web应用程序,GUI应用程序等)轻松驾驶

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