boss让我检查一个java程序的健壮性,该程序原理是每10分钟执行一条命令,输出到一个文本上,现在的问题是程序运行一段时间就输出不了了,隔段时间就罢工,时间长短在几天到一个月。我做系统集成的,对开发比较不感冒,希望高手赐教。下面是程序的介绍以及源代码,谢谢!/////////////////////////////////////////////////////////////////////////////////
1 介绍
Aws日志分析程序可以从aws日志aws.log中分析出所需内容后生成文件aws.txt供监控程序再次分析用。
2 环境说明
2.1 使用环境
根据用户的需求和实际使用情况,确定该系统的使用环境如下所示:类 别            使用软件   备 注
操作系统            Windows
Java运行环境 Sun JRE 1.4.2 2.2 开发环境
•Java开发环境采用Jbuilder 
•面向对象设计工具采用Borland Together
•采用迭代型软件开发模型来开发本软件
•Java源代码必须遵循《编码规范》3 系统结构设计
程序采用java编写,作为一个系统服务在windows系统中。程序有一个定时任务,每十分钟运行。该任务运行时会创建批处理文件run.bat。该文件中调用aws中faultutil命令。然后将该命令结果输入到程序内进行分析。查找每行中 “Time Detected”,” Severity”和” Meaning”字样后的文字,随后以Time Detected+Severity+Meaning的格式输出到aws.txt中。
4 类设计
4.1 Aws日志分析程序
awslogv2.java
public static final void main() 主函数。该函数复杂创建type.bat,分析日志文件并将结果存入aws.txt中。5 操作配置步骤
一、在wgq-ncraws中新建目录c:/OVO;把awslog文件夹拷贝到新目录下;二、把awslog设置成为windows NT4 Server / 2000 / XP的一项服务1. 首先,需要安装两个windows资源工具:srvany.exe,instsrv.exe(这两个软件可以从Google.com上搜索到)。并将它们放到本机的根目录,在笔者机上的目录是d:\winnt,在其他机子上可能会是c:\WINDOWS或c:\winnt。
2. 在运行一栏中敲入cmd后回车,进入命令模式;
3. 必须先安装SRVANY服务,在命令模式中输入INSTSRV SrvAny \srvany.exe,其中是指srvany.exe放置的具体位置(笔者机子位置是d:\winnt);
4. 在命令模式下输入INSTSRV.EXE AWSLOG \SRVANY.EXE,其中是指srvany.exe放置的具体位置(笔者机子位置是d:\winnt);
5. 在运行框中添入regedit,开始编辑注册表。(首先备份原有的注册表文件,在注册表菜单下点击导出注册表文件,然后保存即可);
6. 在注册表中找到子项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AWSLOG,并且选中它;
7. 从编辑菜单中选择新建,选择项,然后输入Parameters;
8. 选中Parameters项,右键单击,选择新建,字符串,输入Application;
9. 右键单击Application,选择修改,输入D:\ovo\awslog\awslog.bat;
10. 选中Parameters项,右键单击,选择新建,字符串,输入AppDirectory;
11. 右键单击AppDirectory,选择修改,输入D:\ovo\awslog;
12. 从开始菜单-〉程序->管理工具,打开服务,右键单击AWSLOG,选择属性,选择启动方式为自动。至此AWSLOG已经成功的安装在你的主机上了。三、运行系统服务awslog即可。///////////////////////////////////因发帖字数限制,源代码请看附件。

解决方案 »

  1.   

    源代码:import java.io.*;
    import java.lang.*;
    import java.lang.Runtime;
    import java.util.Calendar;
    import java.util.Date;
    import java.text.SimpleDateFormat;
    import java.util.Properties;
    import java.util.TimerTask;
    import java.util.Timer;public class awslogv2 extends Thread {
    private static long timeDate = 600000 ; //ten minutes
    private static long timeDate_old = 864000000 ; //ten days
      public static final void main(final String[] args) {
       TimerTask tt = new TimerTask(){     
        public void run() {
        
        int n = 50;
        String Time_Detected[] = new String[n];
        int i = 0;
        String Tera_Severity[] = new String[n];
        int j = 0;
        String Problem_Description[] = new String[n];
        int k = 0;
        String dumpdsString="";
        String description="";
        String meaning1="";
        String meaning2="";
        String meaning3="";
        awslogv2 awslog = new awslogv2();   
        InputStream is = null ;
        BufferedReader br = null ;
        Runtime rt = Runtime.getRuntime() ;
        //Runtime rt2= Runtime.getRuntime() ;
        Date date = new Date() ;
        long time = date.getTime() ;
        time = time - timeDate ;
        Date day = new Date(time) ;
        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm") ;
        String nowTime = sdf.format(date) ;
        String beforeTime = sdf.format(day) ;
        //String process1="C:/program files/ncr/aws/bin/faultutil -all > C:/aws.log";
        String process_1="\"C:\\program files\\ncr\\aws\\bin\\faultutil\" -all -start \""+beforeTime+"\" -end \""+nowTime+"\" -detail 1>C:\\OVO\\aws.log\r\n";
        //String process1="\"C:/program files/ncr/aws/bin/faultutil\" -all -start \""+beforeTime+"\" -end \""+nowTime+"\" -detail";
        String process_2="type C:\\OVO\\aws.log\r\n";
        //String process_2="type E:\\test\\awslog\\aws.log";
        //String process1="C:\\Program Files\\NCR\\AWS\\Bin\\faultutil -all -start \""+nowTime+"\" -end \""+beforeTime+"\" -detail > C:\\aws.log" ; //add the PATH of faultutil as environment parameter 
        //String process1="C:/a.bat";
        String dir = System.getProperty("user.dir") ;     
           try{
                File awsFile1 = new File(dir,"faultutil.bat") ;
         /*if(awsFile1.exists()){
         awsFile1.delete();
         }
         awsFile1.createNewFile();
                RandomAccessFile raf_aws = new RandomAccessFile(awsFile1,"rw") ;
         raf_aws.writeBytes(process_1);
         raf_aws.close();
            System.out.println(process_1);
            rt.exec("faultutil.bat");*/
           
           
            File awsFile2 = new File(dir,"type.bat") ;
            if(awsFile2.exists()){
         awsFile2.delete();
         }
         awsFile2.createNewFile();
                RandomAccessFile raf_aws2 = new RandomAccessFile(awsFile2,"rw") ;
         raf_aws2.writeBytes(process_1);
         raf_aws2.writeBytes(process_2);
         raf_aws2.close();
            System.out.println(process_1);
            System.out.println(process_2);
            Process process = rt.exec("type.bat");
           
            //System.out.println(process0);
            //Process process = rt.exec("awslog.bat");      
            //is = process.getErrStream() ;
           //Process process = rt.exec(process_2);
           //ab = process.getErrorStream();
          is = process.getInputStream() ;
          br = new BufferedReader(new InputStreamReader(is)) ;
          String line = null;
          /*while((line = br.readLine())!= null) {
           System.out.println(line);
          }*/
         if(br.readLine()==null){
              File awslog_error = new File(dir,"awslog_error.log") ;
              if(!awslog_error.exists()){
              awslog_error.createNewFile();
              }       
             Date datedown = new Date();
                  RandomAccessFile raf_run = new RandomAccessFile(awslog_error,"rw") ;
                  raf_run.seek(raf_run.length());
                  raf_run.writeBytes(datedown+"  faultutil doesn't work correctly\r\n");
                  raf_run.close();
              
          }
          while((dumpdsString=br.readLine())!=null){
          
           if(dumpdsString.indexOf("Time Detected")!=-1){
           Time_Detected[i] =awslog.deleteSpace(dumpdsString.substring(dumpdsString.indexOf(":")+12));
           i++;
           /*description = br.readLine();
           Tera_Severity[j] =awslog.deleteSpace(dumpdsString.substring(dumpdsString.indexOf(":")+17));
           j++;*/
           }
               if(dumpdsString.indexOf("Severity:")!=-1){
           Tera_Severity[j] =awslog.deleteSpace(dumpdsString.substring(dumpdsString.indexOf(":")+17));
           j++;
           } 
           /* if(dumpdsString.indexOf("Problem Description")!=-1){
           description = br.readLine();
           Problem_Description[k] =awslog.deleteSpace(description);
           k++;
           } */
            if(dumpdsString.indexOf("Meaning:")!=-1){
           description = br.readLine();
           meaning1 = br.readLine();
           meaning2 = br.readLine();
           meaning3 = br.readLine();
           Problem_Description[k] =awslog.deleteSpace(meaning1+meaning2+meaning3);
           k++;
           }             
           }
                  i=0;
                  File awstxtFile = new File(dir,"aws.txt") ;
                  if(awstxtFile.exists()){
                  awstxtFile.delete();
                   }
                  awstxtFile.createNewFile();
                  RandomAccessFile raf_awstxt = new RandomAccessFile(awstxtFile,"rw") ;
                  while (Time_Detected[i] != null) {
                    String awsLine = Time_Detected[i]+"+"+Tera_Severity[i]+"+"+Problem_Description[i]+"\r\n";
                    //String awsLine = Time_Detected[i]+"+"+Problem_Description[i]+"\r\n";
                    System.out.println(awsLine);
                    raf_awstxt.writeBytes(awsLine);
                    i++;
                  }
                  raf_awstxt.close();
                  
                      }catch(FileNotFoundException fnfe){
                  System.out.println(fnfe);
                    }catch(IOException ioe){
                  System.out.println(ioe) ;
                }
                  }
          };           
                java.util.Timer timer = new Timer();
                timer.schedule(tt,0,10*60*1000);
      }  
      public String deleteSpace(String str){
        while(str.startsWith(" ")){
          str = str.substring(1) ;
        //System.out.println("a"+str+"a");
        }
        while(str.endsWith(" ")){
          str = str.substring(0,str.length()-1) ;
              //System.out.println("a"+str+"a");
        }
        //System.out.println("a"+str+"a");
        return str ;
      }
    }