Having noticed that an application server occasionally freezes, with dire consequences for the stability of the cluster, I set out to compute the longest pauses in the logs, using this indicator as a "freezing marker".
Here is the Java "script", it parses all logs in a directory, and for each log it prints the longest period without any activity in the log.
Enjoy.
package com.pierre.loggrepper;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class WebLogicLogGrepper {
/** reads "Aug 28, 2011 8:02:45 PM" */
DateFormat formatter = new SimpleDateFormat("MMM dd, yyyy h:mm:ss aaaa");
String previousTimeString = null;
long previousTime = 0;
String topTimeString = "";
long topDiff = 0;
public static void main(String[] args) throws Exception {
String DIR = "/home/oracle/Downloads/Temp-MSLogs/1/ms1logs/";
File dir = new File(DIR);
for (File file : dir.listFiles()) {
if (file.getName().startsWith("eposprd_ManagedServer")) {
WebLogicLogGrepper webLogicLogGrepper = new WebLogicLogGrepper();
webLogicLogGrepper.run(file.getAbsolutePath());
}
}
}
public void run(String filename) throws Exception {
FileInputStream fis = new FileInputStream(filename);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line = null;
while ((line = br.readLine()) != null ) {
if (line.startsWith("####<")) {
String currentTimeString = line.substring(5, 29);
long currentTime = getTimeFromString(currentTimeString);
if (previousTimeString == null) {
previousTimeString = currentTimeString;
previousTime = currentTime;
}
else {
long timeDiff = currentTime - previousTime;
if ( timeDiff > topDiff ) {
topDiff = timeDiff;
topTimeString = previousTimeString;
}
previousTime = currentTime;
previousTimeString = currentTimeString;
}
}
}
System.out.println("topDiff=" + topDiff + " topTimeString=" + topTimeString);
}
/**
* Receives a "Aug 28, 2011 8:02:45 PM" and returns its Epoch
* @param timeAsString
* @return
* @throws Exception
*/
public long getTimeFromString(String source) throws Exception {
return formatter.parse(source).getTime();
}
}

No comments:
Post a Comment