class NMONFileFactory {
	private static final Logger logger = LoggerFactory.getLogger(NMONFileFactory.class);
	public static final String NMON_PATH = "/nmon";
	public static final String NMON_DIR_PATH = "nmon.dir";
	public static final String FILE = "file";
	//nmon文件存储 key为OSType_ProcessorArchitecture_DistributionType
	private static final Map<String, File> nmonFileMap = new HashMap<String, File>();
	
	static {
		init();
	}
	
	/**
	 * 初始化nmon文件
	 */
	private static void init() {<FILL_FUNCTION_BODY>}
	
	/**
	 * 根据OS信息获取对应版本的NMON文件
	 * @param os
	 * @return File
	 */
	public static File getNMONFile(OS os) {
		String key = os.getOsType().getValue() 
				+ "_" + os.getProcessorArchitecture().getValue()
				+ "_" + os.getDistributionType().getNmonName()
				+ os.getDistributionVersion().getValue();
		return nmonFileMap.get(key);
	}
}

		try {
			String path = System.getProperty(NMON_DIR_PATH);
			if(path == null) {
				String classpath = null;
				try {
					CodeSource codeSource = NMONFileFactory.class.getProtectionDomain().getCodeSource();
					classpath = codeSource.getLocation().getPath();
		        	if(classpath.startsWith(FILE)) {
		        		//like that: file:/opt/app/cachecloud/cachecloud-web-1.0-SNAPSHOT.war!/WEB-INF/classes!/
		        		classpath = classpath.substring(FILE.length()+1);
		        	}
		        	if(new File(classpath).isDirectory()) {
		        		path = classpath+"../.."+NMON_PATH;
		        	} else {
		        		//like that: /opt/app/cachecloud/cachecloud-web-1.0-SNAPSHOT.war!/WEB-INF/classes!/
		        		String[] tmp = classpath.split("!/", 2);
		        		path = tmp[0].substring(0, tmp[0].lastIndexOf("/"))+NMON_PATH;
		        	}
		        } catch (Exception e) {
		            logger.error(classpath, e);
		        }
			}
			if(path == null){
				return;
			}
	        File nmonDir = new File(path);
			if(!nmonDir.exists()) {
				logger.error("{} path not exist", nmonDir.getAbsolutePath());
				return;
			}
			//获取操作系统目录
			File[] osDirs = nmonDir.listFiles();
			if(osDirs == null) {
				logger.error("{} not contains OS folders", nmonDir.getAbsolutePath());
				return;
			}
			for(File osDir : osDirs) {
				//获取处理器架构目录
				File[] archFiles = osDir.listFiles();
				if(archFiles == null) {
					logger.info("{} not contains architecture folders", osDir.getName());
					continue;
				}
				for(File archDir : archFiles) {
					//获取nmon文件目录
					File[] nmonFiles = archDir.listFiles();
					if(nmonFiles == null) {
						logger.info("{} not contains nomon files", archDir.getName());
						continue;
					}
					for(File nmonFile : nmonFiles) {
						nmonFileMap.put(osDir.getName() + "_" + archDir.getName() 
								+ "_" + nmonFile.getName() , nmonFile);
					}
					logger.info("init {} {} nmon file size="+nmonFiles.length, 
							osDir.getName(), archDir.getName());
				}
			}
			logger.info("init {} finished, os size={}", nmonDir.getAbsolutePath(), osDirs.length);
		} catch (Exception e) {
			logger.error("init nmon factory", e);
		}
	
<no_super_class>