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

问题描述:

我创建了一个Java应用程序,它被拆分成不同的子组件,每个子程序都运行在一个单独的Tomcat实例上。另外,一些组件通过Hibernate使用MySQL数据库。如何检查MySQL和Tomcat是否正在运行?

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

什么可能是最好的解决方案呢?

感谢

发射了简单的固定查询通过MySQL的

SELECT 'a-ok'; 

,并有.JSP返回a-ok文本。如果超时和/或没有回应与a-ok,那么东西的狡猾。如果您需要更详细的信息,可以添加额外的支票,例如请求now()或更大的东西,如SHOW INNODB STATUS

+0

我认为OP需要澄清管理控制台是GUI还是Web应用程序。如果它的Web应用程序和托管服务器关闭,JSP将不会执行。 – 2010-08-12 23:41:20

+0

确实如此,但无论如何,ping可以超时并报告服务器已关闭。我使用wget和这种类型的往返查询脚本监视我的服务器。 – 2010-08-12 23:50:36

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

+0

但是如果Apache和/或Tomcat死了并且没有自行清理呢?由于陈旧的pid文件处于周围,你会得到误报。 – 2010-08-12 23:51:47

+0

或者如果MySQL或Tomcat进程仍然存在,但是由于某种原因它们已经停止响应请求? – 2010-08-12 23:57:01

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

的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! 
} 

如果你想多一点具体的状态,例如检查某个数据库表是否可用或特定的Web应用程序资源是否可用,则必须分别触发更具体的SELECT语句或HTTP请求。

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

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

我会确保你监视你设置的实际上是行使一些代码。事实之后,通过jmx监控JVM也会有所帮助。退房http://www.cacti.net/

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

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

我假设你知道其中的端口正在预先运行(或来自配置文件)。检查最简单的方法是使套接字连接到像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但服务器被卡住或不响应...