- 论坛徽章:
- 0
|
由于tomcat部署的应用,在客户使用的过程中,每过五六天总会吊死成僵尸进程,查看日志为无效的变元,搜遍网络,尝试了很多办法也没有解决此问题。同时不能更换web容器,因为会增加成本,只好用java写了个监控程序,目前正在测试中
package dzews;
/**
* NAME : tomcat.java
* FUNCTION : 监控服务器tomcat状态
* PROGRAMMED : TELSTAR/jlsu
* DATE(ORG) : 20090109
* PROJECT : TELSTAR
* OS : HP-UNIX
* HISTORY :
*/
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import java.util.TimeZone;
public class tomcat {
private long sJKdate;
public tomcat() {
Date now = new Date();
sJKdate = now.getTime();
}
private static final Logger logger = Logger.getLogger(tomcat.class);
private static void keepTomcatAlive() throws NullPointerException {
String s;
boolean isTomcatAlive = false;
java.io.BufferedReader in;
Date now = new Date();
long lnow = now.getTime();
Date selDate = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
String sSel_date = df.format(selDate);
try {
URL url = new URL("http://133.128.4.7:8080/index.jsp");
URLConnection con = url.openConnection();
in = new java.io.BufferedReader(new java.io.InputStreamReader(con.getInputStream()));
con.setConnectTimeout(1000);
con.setReadTimeout(4000);
while ((s = in.readLine()) != null) {
if (s.length() > 0) {
// 如果in.readLine的内容不为空,则证明当前的tomcat容器可用,不过操作直接返回
return;
}
}
in.close();
} catch (Exception ex) {
}
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec("ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'");
in = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));
while ((s = in.readLine()) != null) {
isTomcatAlive = true;
break;
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
if (isTomcatAlive) {
logger.debug(" + sSel_date + "> Tomcat is alive but not response!");
stopTomcat();
}
startTomcat();
}
public static void stopTomcat() {
Date now = new Date();
long lnow = now.getTime();
Date selDate = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
String sSel_date = df.format(selDate);
try {
logger.debug("------------------开始杀死僵尸tomcat---------------------");
java.lang.Process p = java.lang.Runtime.getRuntime().exec("kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`");
java.lang.Process p1 = java.lang.Runtime.getRuntime().exec("ps -ef |grep java | grep -v vi | grep -v tail | grep -v grep");
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(p1.getInputStream()));
String s;
String t = "Djava";
boolean restart = false;
while ((s = in.readLine()) != null) {
if (s.indexOf(t) == -1) {
restart = true;
break;
}
}
logger.debug(" + sSel_date + "> Tomcat is stop " + (restart ? "OK" : "ERROR"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void startTomcat() {
Date now = new Date();
long lnow = now.getTime();
Date selDate = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
String sSel_date = df.format(selDate);
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec("kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`");
} catch (Exception e) {
e.printStackTrace();
}
try {
logger.debug("------------------开始重启---------------------");
java.lang.Process p1 = java.lang.Runtime.getRuntime().exec("/telstar/tomcat/bin/./startup.sh &");
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(p1.getInputStream()));
String s;
String t = "tomcat";
boolean restart = false;
while ((s = in.readLine()) != null) {
if (s.indexOf(t) != -1) {
restart = true;
break;
}
}
logger.debug(" + sSel_date + "> Tomcat is start " + (restart ? "OK" : "ERROR"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Date now = new Date();
long lnow = now.getTime();
Date selDate = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Etc/GMT-8"));
String sSel_date = df.format(selDate);
PropertyConfigurator.configure("/telstar/bin/tomcatJK/logtomcatJK.properties");
logger.debug("------------------开始监控---------------------");
while (true) {
try {
tomcat.keepTomcatAlive();
logger.debug("------------------检测tomcat状态---------------------");
Thread.sleep(24000);
} catch (Exception ex) {
}
}
}
}
log4j属性文件配置如下log4j.properties
log4j.rootLogger=DEBUG,R
#Log4j提供的appender有以下几种:
#org.apache.log4j.ConsoleAppender(控制台),
#org.apache.log4j.FileAppender(文件),
#org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
#org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
#org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#其中log4j提供4种布局.
#org.apache.log4j.HTMLLayout(以HTML表格形式布局)
#org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
#org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
#org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/54454/showart_1785380.html |
|