如何检查MySQL和Tomcat是否正在运行?
我创建了一个Java应用程序,它被拆分成不同的子组件,每个子程序都运行在一个单独的Tomcat实例上。另外,一些组件通过Hibernate使用MySQL数据库。如何检查MySQL和Tomcat是否正在运行?
我现在正在创建一个管理控制台,其中报告了所有Tomcat实例和MySQL的状态。我不需要详细的信息,但知道它们是否在运行就足够了。
什么可能是最好的解决方案呢?
感谢
发射了简单的固定查询通过MySQL的
SELECT 'a-ok';
,并有.JSP返回a-ok
文本。如果超时和/或没有回应与a-ok
,那么东西的狡猾。如果您需要更详细的信息,可以添加额外的支票,例如请求now()
或更大的东西,如SHOW INNODB STATUS
。
最简单的事情是查找MySQL和Tomcat PID文件。您需要查看您的启动脚本以确保确切的位置,但一旦找到它,您只需测试pid文件的存在。
但是如果Apache和/或Tomcat死了并且没有自行清理呢?由于陈旧的pid文件处于周围,你会得到误报。 – 2010-08-12 23:51:47
或者如果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管理控制台中的检查。
我会创建一个简单的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但服务器被卡住或不响应...
我认为OP需要澄清管理控制台是GUI还是Web应用程序。如果它的Web应用程序和托管服务器关闭,JSP将不会执行。 – 2010-08-12 23:41:20
确实如此,但无论如何,ping可以超时并报告服务器已关闭。我使用wget和这种类型的往返查询脚本监视我的服务器。 – 2010-08-12 23:50:36