/** * Executes the commands and process the results to return the AIX OS memory pm data. * * @param params the performance metrices to be monitored by this task. * @param flags parameter and command flags. * @return returns the PMData instance. */ private static PMData getAixPMData(String[] params, boolean[][] flags) { if (flags == null) { flags = isParamsExists(params); } boolean[] cmdflag = flags[0]; boolean[] pflag = flags[1]; long exectime = System.currentTimeMillis(); // execute the opc_utl command String aixmemoryResult = null; if (cmdflag[TOP]) { try { aixmemoryResult = RunCommand.exec(AIX_AIXMEMORYCMD); } catch (Exception e) { IsmMonAgentUtil.debug(e.getMessage()); } } // execute the swap command String swapResult = null; if (cmdflag[SWAP]) { try { swapResult = RunCommand.exec(AIX_SWAPCMD, 10000); } catch (Exception e) { IsmMonAgentUtil.debug(e.getMessage()); } } // process the opc_utl command result Vector paramlist = new Vector(); if (cmdflag[TOP] && (aixmemoryResult != null)) { /* output looks like: /users/donjiang/opc009/agent/bin>opc_utl -m RealMemory: 16384.0M FreeMemory: 523.4M */ StringTokenizer rtokenizer = new StringTokenizer(aixmemoryResult, "\n"); String line = null; long realmemory = 0; long freememory = 0; while (rtokenizer.hasMoreTokens()) { line = rtokenizer.nextToken().trim(); if (line.startsWith("RealMemory")) { StringTokenizer ltokenizer = new StringTokenizer(line, " \t"); ltokenizer.nextToken(); realmemory = getMemorySize(ltokenizer.nextToken()); } if (line.startsWith("FreeMemory")) { StringTokenizer ltokenizer = new StringTokenizer(line, " \t"); ltokenizer.nextToken(); freememory = getMemorySize(ltokenizer.nextToken()); } } if (realmemory == 0 || freememory == 0) { IsmMonAgentUtil.debug( "Error: OsMemoryTask, invalid number of lines for opc_utl report." + aixmemoryResult, IsmMonAgentUtil.MAJOR); } if (pflag[REALMEMORY]) { paramlist.addElement( new PmMeasurement(REALMEMORYNAME, String.valueOf(realmemory), true, null)); } if (pflag[FREEMEMORY]) { paramlist.addElement( new PmMeasurement(FREEMEMORYNAME, String.valueOf(freememory), true, null)); } } // process the swap command if (cmdflag[SWAP] && (swapResult != null)) { if (pflag[SWAPUSED] || pflag[SWAPFREE]) { String swapused = "n/a"; String swapfree = "n/a"; long totalpagingspace = 0; long percentused = 0; StringTokenizer rtokenizer = new StringTokenizer(swapResult, "\n"); String line = null; if (rtokenizer.countTokens() >= 2) { line = rtokenizer.nextToken(); line = rtokenizer.nextToken(); StringTokenizer ltokenizer = new StringTokenizer(line, " "); if (ltokenizer.countTokens() >= 2) { totalpagingspace = getMemorySize(ltokenizer.nextToken().trim()); String temp = ltokenizer.nextToken().trim(); temp = temp.substring(0, temp.length() - 1); // remove "%" sign percentused = (Long.valueOf(temp)).longValue(); // Figure out swapused & swapfree swapused = String.valueOf((totalpagingspace * percentused) / 100); swapfree = String.valueOf(totalpagingspace - (Long.valueOf(swapused)).longValue()); } } if (pflag[SWAPUSED]) { paramlist.addElement(new PmMeasurement(SWAPUSEDNAME, swapused, true, null)); } if (pflag[SWAPFREE]) { paramlist.addElement(new PmMeasurement(SWAPFREENAME, swapfree, true, null)); } } } return getPMData(paramlist, params, pflag, cmdflag, exectime); }