- 浏览: 114277 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
小布丁丶:
一个简单的问题非要整这么复杂
extjs grid 根据条件禁用选中 -
kylewebgame:
不错啊,做一个线程定时保存,不知道记录后如何做查询呢?或者怎样 ...
一个日志管理设计类
进程的基本信息类 public class ProcessDefDto { private long omcId; private String command;//启进程命令 private int port;//端口号 private int collectType;//采集类型,0 snmp,1 tl1 public ProcessDefDto(){ } public ProcessDefDto(long omcId,String command,int port,int collectType){ this.omcId= omcId; this.command= command; this.port= port; this.collectType= collectType; } public void setOmcId(long omcId){ this.omcId= omcId; } public long getOmcId(){ return this.omcId; } public void setCommand(String command){ this.command= command; } public String getCommand(){ return this.command; } public void setPort(int port){ this.port= port; } public int getPort(){ return this.port; } public void setCollectType(int collectType){ this.collectType= collectType; } public int getCollectType(){ return this.collectType; } } 一系列的进程 public class ProcessManager { private static Logger log = Logger.getLogger(MonitorThread.class); private static Vector<ProcessDefDto> processDefs = new Vector<ProcessDefDto>(); private Map<String, String> mapCmds = new HashMap<String, String>(); /** 起始端口 **/ private String start_port="start_port"; /**启动命令 **/ private String snmp_key="snmp_cmd"; private String tl1_key="tl1_cmd"; private String tl1_parse_key="tl1_parse_cmd"; private String snmp_parse_key="snmp_parse_cmd"; private String tl1_alm_key="tl1_alm_cmd"; private String tl1_coll_key="tl1_coll_cps"; private String res_cj_key="res_cj"; private int defaultPort=6000; public ProcessManager(Map<String, String> mapCmds){ this.mapCmds=mapCmds; } //初始化所有待启动进程 public boolean initprocessDefs(String areaIds){ long t1=System.currentTimeMillis(); Map<Integer,String> omcmap=PonCollectorDaoServiceProvider.getOmcConfigDao().findOmcIdByAreaIds(areaIds); String snmp_cmd=mapCmds.get(snmp_key); String tl1_cmd=mapCmds.get(tl1_key); String tl1_parse_cmd=mapCmds.get(tl1_parse_key); String snmp_parse_cmd=mapCmds.get(snmp_parse_key); String tl1_alm_cmd=mapCmds.get(tl1_alm_key); String tl1_coll_cps=mapCmds.get(tl1_coll_key); String res_cj=mapCmds.get(res_cj_key); if(mapCmds.get(start_port)!=null&&!mapCmds.get(start_port).equals("")){//配置的端口号不为空,则取配置 的端口号。 defaultPort=Integer.valueOf(mapCmds.get(start_port)); }; log.info("区域areaId:"+areaIds+",对应OMCID数:"+omcmap.size()); ServicePortManager portmgr= new ServicePortManager(); //增加SNMP采集进程 if (snmp_cmd != null && !snmp_cmd.equals("")) { for (Integer omc : omcmap.keySet()) { ProcessDefDto proDef = new ProcessDefDto(); int port = portmgr.initPort(defaultPort, String.valueOf(omc), ServicePortManager.SNMPTYPE); defaultPort = port + 1; proDef.setOmcId(omc); proDef.setCommand(snmp_cmd + " " + omc + " " + port); proDef.setPort(port); proDef.setCollectType(0); processDefs.add(proDef); } } else { log.info("SNMP启动命令没有配置"); } //增加TL1解析进程 if (tl1_parse_cmd != null && !tl1_parse_cmd.equals("")) { String[] areas = areaIds.split(","); CollRmiCfg crc = PonCollectorDaoServiceProvider.getCollRmiCfgDao() .getPortById((short) Integer.parseInt(areas[0]), (short) 3); String ip = crc.getServerIp(); String cmds[] = tl1_parse_cmd.split("\\|\\|"); for (String area : areas) { for (String cmd : cmds) { ProcessDefDto proDef = new ProcessDefDto(); String newCmd = cmd.replaceAll("\\{ip\\}", ip); proDef.setCommand(newCmd + " " + area); proDef.setCollectType(1); processDefs.add(proDef); } } } else { log.info("TL1解析进程启动命令没有配置"); } //增加TL1告警进程 if (tl1_alm_cmd != null && !tl1_alm_cmd.equals("")) { for (Integer omc : omcmap.keySet()) { ProcessDefDto proDef = new ProcessDefDto(); int port = portmgr.initPort(defaultPort, String.valueOf(omc), ServicePortManager.TL1TYPE); defaultPort = port + 1; String factory = omcmap.get(omc); proDef.setOmcId(omc); proDef.setCommand(tl1_alm_cmd + " " + omc + " " + factory + " "+port); proDef.setPort(port); proDef.setCollectType(1); processDefs.add(proDef); } } else { log.info("TL1启动命令没有配置"); } public void startAllProcess(){ for(ProcessDefDto pro:processDefs){ startProc(pro); } } public void stopAllProcess(){ for(ProcessDefDto pro:processDefs){ stopProc(pro); } } public void startProc(ProcessDefDto pro){ ProcessUtil.startProcess(pro.getCommand()); } public void stopProc(ProcessDefDto pro){ ProcessUtil.stopProcess(pro.getCommand()); } public Vector<ProcessDefDto> getProcessDefs(){ return processDefs; } } 没有列举太多的进程信息 一个线程监控所有的进程 public class MonitorThread extends Thread{ private static Logger log = Logger.getLogger(MonitorThread.class); public void run(){ ProcessManager pm =CollectServiceProvider.getProcessManager(); Vector<ProcessDefDto> processManagerDtos = pm.getProcessDefs(); log.info("monitor thread start..."); while (true) { Map<String, String[]> map = ProcessUtil.getProcessInfo(); if(map!=null){ for (ProcessDefDto managerDto : processManagerDtos) { String[] status = map.get(managerDto.getCommand()); if (ProcessUtil.isDown(status)) {// 进程满足挂起僵死条件,则进行重启 log.info("进程启动>"+managerDto.getCommand()); if(status!=null){ pm.stopProc(managerDto); } pm.startProc(managerDto); } } } try { Thread.sleep(15000); } catch (InterruptedException e) { log.error("InterruptedException",e); } } } } /** * 进程启动停止等工具类 */ public class ProcessUtil { private static Logger log = Logger.getLogger(ProcessUtil.class); public final static String PROCESS_INFO_CMD_LINUX = "ps axo pid,stat,command"; public final static String PROCESS_INFO_CMD_AIX = "ps -efo pid,state,args"; public final static String PROCESS_INFO_CMD_SunOS = "/usr/ucb/ps -axww"; private final static Map<String, String> osCmdMap = new HashMap<String, String>(){ { put("Linux", PROCESS_INFO_CMD_LINUX); put("AIX", PROCESS_INFO_CMD_AIX); put("SunOS", PROCESS_INFO_CMD_SunOS); }}; private static Runtime runtime = Runtime.getRuntime(); public static boolean startProcess(String cmd){ try{ Process process = runtime.exec(cmd); new ConsoleThread(process,cmd).start(); return true; }catch (Exception e) { log.error("error in start "+ cmd,e); } return false; } public static boolean stopProcess(String cmd){ try{ Map<String, String[]> map = getProcessInfo(); if(map!=null){ String[] info = map.get(cmd); if(info!=null){ runtime.exec("kill -9 "+info[0]); }else{ log.info("can not find process " + cmd); } } return true; }catch (Exception e) { log.error("error in stop "+ cmd,e); } log.info("stop failed "); return false; } public synchronized static Map<String, String[]> getProcessInfo(){ String osName = System.getProperty("os.name"); String cmd = osCmdMap.get(osName); try{ if ("Linux".equals(osName)||"AIX".equals(osName)) { Process p = runtime.exec(cmd); BufferedInputStream in = new BufferedInputStream(p.getInputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String str = new String(); Map<String, String[]> map = new HashMap<String, String[]>(); while ((str = br.readLine()) != null) { Scanner s = new Scanner(str); String pid = s.next(); String state = s.next(); String command = str.substring(str.indexOf(state)+state.length()).trim(); map.put(command, new String[]{pid,state}); s.close(); } br.close(); in.close(); p.destroy(); return map; }else if("SunOS".equals(osName)){ Process p = runtime.exec(cmd); BufferedInputStream in = new BufferedInputStream(p.getInputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String str = new String(); Map<String, String[]> map = new HashMap<String, String[]>(); while ((str = br.readLine()) != null) { Scanner s = new Scanner(str); String pid = s.next(); s.next(); String state = s.next(); String index = s.next(); String command = str.substring(str.indexOf(index)+index.length()).trim(); map.put(command, new String[]{pid,state}); s.close(); } br.close(); in.close(); p.destroy(); return map; }else{ log.debug(osName + " monitor unimplementate "); return null; } }catch (Exception e) { log.error("",e); return null; } } /** * 进程运行是否正常 * @param status * @return */ public static boolean isDown(String[] status){ if(status==null) return true; String osName = System.getProperty("os.name"); if ("Linux".equals(osName)) { if(status[1].equals("X") || status[1].equals("Z")){//X:死掉的进程 Z:僵尸进程 return true; }else{ return false; } }else if ("AIX".equals(osName)){ if(status[1].equals("Z") || status[1].equals("T")){//Z:已取消 T:已停止 return true; }else{ return false; } }else if("SunOS".equals(osName)){ if(status[1].equals("Z") || status[1].equals("T")){//Z:已取消 T:已停止 return true; }else{ return false; } }else{ log.debug(osName + " monitor unimplementate "); return false;//不处理 } } } /** * 控制台输出线程,防止被管进程由于控制台导致的进程挂起 * */ public class ConsoleThread extends Thread { private Logger log = Logger.getLogger(ConsoleThread.class); private Process process = null; private String commad = null; public ConsoleThread(Process process,String commad) { this.process = process; this.commad = commad; } public void run() { if(this.process ==null) return; log.info(this.commad +" console thread start."); BufferedInputStream in = new BufferedInputStream(this.process.getInputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(in)); try { String s = br.readLine(); while (s != null) { System.out.println(s); s = br.readLine(); } } catch (Exception e) { log.error(this.commad, e); } finally { try { br.close(); in.close(); } catch (Exception e) { log.error(this.commad, e); } } log.info(this.commad + " end"); } }
发表评论
-
使用BeanUtils时,遇到日期类型的空值时会抛错的解决办法
2013-03-14 16:46 868public class BeanUtilEx exten ... -
Oracle 计算两个时间的差值
2012-11-08 20:26 2557Oracle 计算两个时间的差值 有两个日期数据STA ... -
一个日志管理设计类
2012-07-23 20:10 1301public class LogDataQueue { ... -
JDBC操作数据库的步骤
2012-07-08 21:49 1098#传统JDBC访问数据库步骤 》通过Cla ... -
java 分页类
2012-07-08 21:37 871package com.iflytek.hr.model ... -
java 斗地主发牌
2012-07-08 21:23 1082/** * * @Title: Controlle ... -
面向对象设计1
2012-02-19 16:02 843我要去新疆 面向过程:注重过程,进过什么地方到达新疆,例如过 ... -
Java的内存知识梳理
2012-02-18 10:42 938栈、堆、常量池等虽同属Java内存分配时操作的区域,但其适用范 ... -
定时任务类统一接口以及实现(1)
2012-02-15 19:22 1120public interface ITaskRunner { ... -
初始化容器编写的类
2012-02-15 19:03 903public interface Initializer { ... -
IO流的讲解
2012-02-14 15:54 880关于IO流讲解的一篇不错文章 http://blog.csdn ... -
Java中getResourceAsStream的用法
2012-02-07 14:58 1079三种写法: 1.“ / ”代表了工程的根目录,例如工 ... -
练习对XML文件的操作
2011-12-24 16:50 895初步练习下java对XML文件的操作,加深下记忆而已,代码如下 ...
相关推荐
《UML在JAVA WEB企业人事管理系统中的应用》 UML(Unified Modeling Language,统一建模语言)是软件工程领域一种广泛使用的建模工具,它为软件开发提供了图形化的表示方式,便于理解和交流软件设计思想。在JAVA ...
Java框架是Java开发中一个重要的概念,它是设计用来简化软件开发的一套规则、类和对象集合,可以用于管理应用程序的结构。Java框架通常提供了一些工具和库,使得开发者可以不必从头开始编写代码,而是可以重用已有的...
他们懂得在问题出现初期及时纠正,避免问题的恶化,确保项目进程不受影响。同时,与团队和领导的沟通至关重要,对于有争议的需求或问题,他们会积极参与讨论,确保开发方向的一致性。 2. **职责明确,记录与总结** ...
Elasticsearch是用Java开发的,并在Apache许可证下作为开源发布。它是一种广泛使用的搜索引擎和数据分析工具。Elasticsearch在全文搜索、日志分析、安全监控、应用监控、网站搜索等多个领域有着广泛的应用。 ...
Gradle-8.3 此版本支持持久性Java编译器守护进程加速Java编译。格拉德也会用减少依赖关系解析的内存。这种影响是显著的,特别是对于像Android这样的大型构建。 Gradle现在支持在Java 20上运行。 对于Kotlin DSL,...
1. **MQServer**:这是IBM MQ服务器的主要组成部分,包括了MQ的守护进程(qmfagentd、mqm、qmstartd等)、管理工具以及运行时库。这些组件使得IBM MQ能够在Linux环境下运行,并提供消息队列服务。 2. **安装脚本与...
- **应用服务器实例体系结构**:应用服务器实例是在单一JVM进程中运行的应用服务器。可通过命令行工具iastool或管理控制台进行配置管理。 #### 四、BES的管理架构和基本操作 - **管理架构**:由DMS、NodeAgent和...
4. 服务和守护进程:启动和管理IBM MQ服务器进程。 5. JMS客户端库:用于Java应用程序的消息接口。 6. 其他语言的SDK:如.NET SDK,便于非Java应用的开发。 通过这个试用版,用户可以深入了解IBM MQ的功能特性,并...
4. 推动行业发展:该软件的推广将促进汽车行驶数据管理软件的进步,助力汽车行业智能化和信息化进程。 按照预设的时间表,本研究计划在2021年6月至2022年6月期间完成,涵盖需求分析、系统设计、编码实现、系统测试...
该类库抽象了使用 Direct3D 和 OpenGL 等底层系统库的所有细节,并提供了基于世界对象和其他直观类的接口。尝试一下- 构建- 教程- 手册- 有什么新东西? - 谁在使用它? - 社区支持特征如需查看详尽列表,请参阅功能...
5. 连接应用:JProfiler支持多种连接模式,包括本地连接(附着到已运行的进程)和远程连接(通过网络连接到远程服务器上的Java应用)。根据你的需求选择相应的连接方式。 6. 分析:一旦连接成功,你就可以开始进行...
综上所述,本课题旨在利用SSM框架构建一个功能完善、用户体验优良的体育用品交易网站,以适应日益增长的在线购物需求,推动体育用品市场的电子商务化进程。通过深入研究和实践,有望为类似项目的开发提供有价值的...
2. 强大的库支持:JAVA拥有丰富的开源库和框架,如Spring、Hibernate等,可以加速开发进程,提高代码质量。 3. 安全性:JAVA内置的安全机制有助于保护用户数据,防止潜在的安全威胁。 4. 社区支持:JAVA拥有庞大的...
同时,提供大量的Java EE模板,如Struts、Spring、Hibernate等,加速企业级应用的开发进程。 6. **图形化界面设计**:通过WYSIWYG方式设计JSP、HTML、JSF页面,提高UI开发效率。 7. **插件集成**:集成众多开发工具...
因此,开发一款高效、实用的在线考试系统成为当前教育信息化进程中的一个重要课题。 本项目旨在设计并实现一个基于JavaWeb技术的在线考试系统。该系统能够支持学生的在线答题、教师的试题管理及成绩评定等功能,...
为了支持DM8的正常运行,需要增加`dmdba`用户的最大打开文件句柄数和最大进程数。在`/etc/security/limits.conf`文件中添加对应的配置,然后通过`sysctl –p`命令使更改生效。 5. **给dmdba添加sudo授权**: 编辑...
例如,SQLite数据库用于存储学生的名单和点名记录,RecyclerView或者ListView组件用于展示学生列表,Button控件用于触发点名操作,随机数生成器(java.util.Random类)则用于实现随机抽取功能。 系统的界面设计强调...