`

java开发中的异常捕获的重要性

 
阅读更多
   今天发现主机监控的内存采集不采集了,查看一下发现原来局方把sar的权限给取消了,导致采集方法报错,但是内存的采集是利用的vmstat 2 10 这个命令,为什么会导致内存采集不上来呢?
    查看源代码发现
	public Vector getMemory(HashMap params) {
		logger.info("begin getMemory");
		init(params);
		// 得到unit_id中使用的主机名称
		String neat_host_name = rpctarget.getNeat_host_name();
		if (neat_host_name == null || neat_host_name.equals("")) {
			// 获取主机名称
			String host_name = this.getHostName();
			// 得到unit_id中使用的主机名称
			neat_host_name = Formater.neatenunitid(host_name);
		}
		// 保存采集结果,并返回值
		CollBase collResult = new CollBase();
		// 本方法得到的kpi值的unit_id,均以PRE_UNITID + "-12"开头
		String memory_PRE_UNITID = PRE_UNITID + "-12";
		// 增加采集时间指标
		String pattern = "yyyy-MM-dd-HH-mm-ss";
		SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
		collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name + "",
				"CM-00-01-001-22", dateFormat.format(new java.util.Date()));
		Vector memoryout = rpctarget.getKPISet("vmstat 2 10");
		String memoryrun = (String) memoryout.elementAt(memoryout.size() - 1);
		try {
			// PM-00-01-002-01 内存的使用率 主机内存的使用量与内存总量的比值
			Vector mem_num = rpctarget
					.getKPISet("prtconf |grep 'Good Memory Size:'");
			String memory = (String) mem_num.elementAt(0);
			int free_mem = Integer.parseInt(split(memoryrun, 3)) * 4 / 1024; // 空余内存
			// 单位:M
			int total_mem = Integer.parseInt(split(memory, 3)); // 总内存 单位:M
			double use_per = 100.0 - (free_mem * 100.0) / total_mem; // 内存使用率
			String mem_use_per = this
					.getByScale(new Double(use_per).toString());
			collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name
					+ "-memory", "PM-00-01-002-01", Formater
					.formatDecimalKpivalue(mem_use_per));

			// 系统内存使用率
			// 用户内存使用率
			String sys_user_rate = Float.parseFloat(mem_use_per) * 0.7 + "";
			String sys_use_rate = Float.parseFloat(mem_use_per) * 0.3 + "";
			collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name
					+ "-memory", "PM-00-01-002-07", Formater
					.formatDecimalKpivalue(sys_user_rate));
			collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name
					+ "-memory", "PM-00-01-002-06", Formater
					.formatDecimalKpivalue(sys_use_rate));

		} catch (Exception e) {
			e.printStackTrace();
		}
		String value = "";
		// M-00-01-002-02 内存交换请求数
		value = split(memoryrun, 7);
		collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name + "-memory",
				"PM-00-01-002-02", Formater.formatDecimalKpivalue(value));
		// PM-00-01-002-03 内存交换页换进率
		value = split(memoryrun, 5);
		collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name + "-memory",
				"PM-00-01-002-03", Formater.formatDecimalKpivalue(value));
		// PM-00-01-002-04 内存交换页换出率
		value = split(memoryrun, 6);
		collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name + "-memory",
				"PM-00-01-002-04", Formater.formatDecimalKpivalue(value));
		// PM-00-01-002-05 内存队列数
		value = split(memoryrun, 0);
		collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name + "-memory",
				"PM-00-01-002-05", Formater.formatDecimalKpivalue(value));
		// PM-00-01-002-08 文件系统数据缓冲命中率
		// Vector filerate_result = rpctarget.getKPISet("sar -b 2 2");
		// if (filerate_result != null && filerate_result.size() > 0) {
		// String filerate_string = (String) filerate_result
		// .elementAt(filerate_result.size() - 1);
		// int r_rate = Integer.parseInt(split(filerate_string, 3));
		// int w_rate = Integer.parseInt(split(filerate_string, 6));
		// value = String.valueOf((r_rate + w_rate) / 2);
		// collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name
		// + "-memory", "PM-00-01-002-08",
		// Formater.formatDecimalKpivalue(value));
		// } else {
		// logger.error("error when exe 'sar -b 2 2' , null or nothing return");
		// }
		// Vector filerate_result = rpctarget.getKPISet("sar -b 2 2");
		String commond = "sh ibmaix/cachehitrate.sh";
		Vector filerate_result = this.execute(commond);
			if (filerate_result != null && filerate_result.size() > 0) {
				String filerate_string = (String) filerate_result.elementAt(0);
				float fault = Float.parseFloat(split(filerate_string, 3));
				float odio = Float.parseFloat(split(filerate_string, 4));
				value = Formater.formatDecimalKpivalue(String.valueOf(fault
						* 100 / (fault + odio)));
				collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name
						+ "-memory", "PM-00-01-002-08", Formater
						.formatDecimalKpivalue(value));
			} else {
				logger
						.error("error when exe 'sar -b 2 2' , null or nothing return");
			}

		logger.info("end getMemory");
		return collResult.getKPISet();
	}

出现问题的原因就是在下面的代码编程当中没有捕获异常,导致整个方法都采集不到值,真是城池失火殃及鱼池呀。做程序员一定要注意。
修改后的代码为:
	public Vector getMemory(HashMap params) {
		logger.info("begin getMemory");
		init(params);
		// 得到unit_id中使用的主机名称
		String neat_host_name = rpctarget.getNeat_host_name();
		if (neat_host_name == null || neat_host_name.equals("")) {
			// 获取主机名称
			String host_name = this.getHostName();
			// 得到unit_id中使用的主机名称
			neat_host_name = Formater.neatenunitid(host_name);
		}
		// 保存采集结果,并返回值
		CollBase collResult = new CollBase();
		// 本方法得到的kpi值的unit_id,均以PRE_UNITID + "-12"开头
		String memory_PRE_UNITID = PRE_UNITID + "-12";
		// 增加采集时间指标
		String pattern = "yyyy-MM-dd-HH-mm-ss";
		SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
		collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name + "",
				"CM-00-01-001-22", dateFormat.format(new java.util.Date()));
		Vector memoryout = rpctarget.getKPISet("vmstat 2 10");
		String memoryrun = (String) memoryout.elementAt(memoryout.size() - 1);
		try {
			// PM-00-01-002-01 内存的使用率 主机内存的使用量与内存总量的比值
			Vector mem_num = rpctarget
					.getKPISet("prtconf |grep 'Good Memory Size:'");
			String memory = (String) mem_num.elementAt(0);
			int free_mem = Integer.parseInt(split(memoryrun, 3)) * 4 / 1024; // 空余内存
			// 单位:M
			int total_mem = Integer.parseInt(split(memory, 3)); // 总内存 单位:M
			double use_per = 100.0 - (free_mem * 100.0) / total_mem; // 内存使用率
			String mem_use_per = this
					.getByScale(new Double(use_per).toString());
			collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name
					+ "-memory", "PM-00-01-002-01", Formater
					.formatDecimalKpivalue(mem_use_per));

			// 系统内存使用率
			// 用户内存使用率
			String sys_user_rate = Float.parseFloat(mem_use_per) * 0.7 + "";
			String sys_use_rate = Float.parseFloat(mem_use_per) * 0.3 + "";
			collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name
					+ "-memory", "PM-00-01-002-07", Formater
					.formatDecimalKpivalue(sys_user_rate));
			collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name
					+ "-memory", "PM-00-01-002-06", Formater
					.formatDecimalKpivalue(sys_use_rate));

		} catch (Exception e) {
			e.printStackTrace();
		}
		String value = "";
		// M-00-01-002-02 内存交换请求数
		value = split(memoryrun, 7);
		collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name + "-memory",
				"PM-00-01-002-02", Formater.formatDecimalKpivalue(value));
		// PM-00-01-002-03 内存交换页换进率
		value = split(memoryrun, 5);
		collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name + "-memory",
				"PM-00-01-002-03", Formater.formatDecimalKpivalue(value));
		// PM-00-01-002-04 内存交换页换出率
		value = split(memoryrun, 6);
		collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name + "-memory",
				"PM-00-01-002-04", Formater.formatDecimalKpivalue(value));
		// PM-00-01-002-05 内存队列数
		value = split(memoryrun, 0);
		collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name + "-memory",
				"PM-00-01-002-05", Formater.formatDecimalKpivalue(value));
		// PM-00-01-002-08 文件系统数据缓冲命中率
		// Vector filerate_result = rpctarget.getKPISet("sar -b 2 2");
		// if (filerate_result != null && filerate_result.size() > 0) {
		// String filerate_string = (String) filerate_result
		// .elementAt(filerate_result.size() - 1);
		// int r_rate = Integer.parseInt(split(filerate_string, 3));
		// int w_rate = Integer.parseInt(split(filerate_string, 6));
		// value = String.valueOf((r_rate + w_rate) / 2);
		// collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name
		// + "-memory", "PM-00-01-002-08",
		// Formater.formatDecimalKpivalue(value));
		// } else {
		// logger.error("error when exe 'sar -b 2 2' , null or nothing return");
		// }
		// Vector filerate_result = rpctarget.getKPISet("sar -b 2 2");
		String commond = "sh ibmaix/cachehitrate.sh";
		Vector filerate_result = this.execute(commond);
			if (filerate_result != null && filerate_result.size() > 0) {
				try{
				String filerate_string = (String) filerate_result.elementAt(0);
				float fault = Float.parseFloat(split(filerate_string, 3));
				float odio = Float.parseFloat(split(filerate_string, 4));
				value = Formater.formatDecimalKpivalue(String.valueOf(fault
						* 100 / (fault + odio)));
				collResult.addKPI(memory_PRE_UNITID + ":" + neat_host_name
						+ "-memory", "PM-00-01-002-08", Formater
						.formatDecimalKpivalue(value));
				}catch(Exception e){
					e.printStackTrace();
				}
			} else {
				logger
						.error("error when exe 'sar -b 2 2' , null or nothing return");
			}

		logger.info("end getMemory");
		return collResult.getKPISet();
	}

这样就把内存的利用率采集到了。
分享到:
评论

相关推荐

    java异常处理机制示例(java抛出异常、捕获、断言)

    Java异常处理机制是Java编程中不可或缺的一部分,它用于处理程序运行过程中可能出现的错误或异常情况。这个机制通过五个关键字:try、catch、throw、throws、finally来实现。 1. **try** 关键字:用于包围可能抛出...

    java开发异常处理与日志规范

    Java开发中的异常处理和日志规范对于保持代码的健壮性和可维护性至关重要。下面将详细阐述这些要点: 1. **避免捕获可预检查的RuntimeException**:在Java中,像NullPointerException和IndexOutOfBoundsException...

    java异常捕捉

    在Java编程语言中,异常处理是一项至关重要的机制,它允许程序员优雅地处理程序运行时可能出现的问题,从而确保程序的稳定性和可靠性。Java异常捕捉通过使用try、catch、finally和throw关键字来实现,这些关键字帮助...

    有关java开发中对异常的处理知识

    在Java开发过程中,异常处理是一项非常重要的技能。良好的异常处理不仅可以提升程序的健壮性,还能提高用户体验。本篇将详细介绍Java中的异常处理机制及其应用。 #### 应用程序的非预期情况 在程序运行过程中,经常...

    Java编程中异常处理的方法和技巧研究.pdf

    Java编程中异常处理的方法和技巧研究 Java编程中异常处理是一项非常重要的技能和策略。...通过本文的研究和讨论,我们希望能够帮助Java开发人员更好地理解和掌握Java中的异常处理机制和技术,提高程序的质量和可靠性。

    java程序中的异常处理

    异常处理是Java编程中的一个重要组成部分,通过合理设计异常类和使用异常处理结构,可以有效地提升程序的健壮性和可维护性。在实际开发中,合理地使用异常处理不仅可以帮助我们更好地管理程序的错误状态,还能提高...

    实际项目中java自定义异常

    在实际的Java开发项目中,自定义异常是提高代码可读性和可维护性的重要手段。异常处理是程序设计的关键部分,它有助于捕获并处理在程序执行过程中可能出现的错误或异常情况。Java提供了丰富的异常处理机制,包括预...

    深入理解java异常处理机制Java开发Java经验技巧共

    这篇19页的PDF文档《深入理解java异常处理机制Java开发Java经验技巧共》可能涵盖了Java异常处理的基本概念、最佳实践以及高级用法。在Java中,异常处理通过五个关键字来实现:try、catch、finally、throw和throws。 ...

    java实验报告4-异常处理

    Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误时能够优雅地运行,而不是突然崩溃。本实验报告“java实验报告4-异常处理”旨在帮助初学者掌握Java中的异常处理机制,以及如何利用log4j进行日志...

    java开发实战经典

    14. **单元测试**:讲解JUnit的使用,理解测试的重要性,编写和执行单元测试。 15. **Maven或Gradle构建工具**:介绍如何使用这些工具管理依赖、构建项目,理解POM.xml或build.gradle文件的结构。 16. **源码阅读...

    MyEclipse 6 Java 开发中文教程(上)

    本教程深入浅出地介绍了Java开发的核心概念和技术,以及MyEclipse 6作为强大工具集的诸多功能。 首先,教程将引导读者了解Java语言的基础,包括变量、数据类型、运算符、流程控制语句(如if-else、switch、for、...

    java异常机制小结

    Java 异常机制是 Java 语言中一个非常重要的方面,也是程序设计的一大难点。Java 语言在设计的当初就考虑到异常处理的框架的方案,使得所有的异常都可以用一个类型来表示,不同类型的异常对应不同的子类异常。Java ...

    JAVA范例 四)异常处理---编译时异常、运行时异常

    在Java编程语言中,异常处理是一项至关重要的技能,它涉及到程序的健壮性和可靠性。本文将深入探讨"JAVA范例 四)异常处理---编译时异常、运行时异常"这个主题,结合标签"源码"和"工具",我们可以理解这与实际编程...

    Java语言中的两种异常

    由于这些异常是可预见的,因此要求开发人员必须在代码中显式处理,这有助于提高程序的健壮性和用户体验。 **2. RuntimeException的应用场景** `RuntimeException`则用于表示程序设计错误或逻辑错误,如数组越界、...

    Java基础入门教程 第7章 Java中的异常处理(共26页).ppt

    Java中的异常处理是编程中...在实际开发中,应尽量避免使用`Exception`作为`catch`块的参数,因为这会捕获所有异常,导致代码的可维护性和可读性降低。而是应该尽可能具体地捕获和处理异常,以便快速定位和解决问题。

    java 异常框架CODE

    总结,Java异常框架是保证程序健壮性和可维护性的重要部分,它提供了优雅的方式来处理错误情况,同时允许代码的结构保持清晰。对于Web服务开发,如使用Jersey,异常处理更加关键,因为它直接关联到对外接口的响应...

    Java开发手册(终极版、华山版、泰山版).zip

    网络编程中会强调异步处理和响应式编程的重要性。 3. **阿里巴巴Java开发手册(终极版v1.3.0)**: 终极版通常是最新的版本,它结合了之前版本的经验,并引入了最新的技术趋势和最佳实践。例如,可能增加了对Java...

    唯品会Java开发手册.zip

    《唯品会Java开发手册》是一份针对Java程序员的重要参考资料,尤其对于在唯品会这样的电商平台上进行开发的工程师来说,具有极高的实践指导价值。这份手册深入浅出地介绍了唯品会在Java开发过程中的最佳实践、规范...

    《Java开发手册》泰山版.zip

    手册强调了如何正确地抛出和捕获异常,避免空指针异常,以及如何使用自定义异常来提高代码的健壮性。 3. **并发处理**:在多线程环境下,Java提供了丰富的并发工具类。手册提供了关于线程安全、同步机制、并发容器...

Global site tag (gtag.js) - Google Analytics