性能统计工具代码

来源:互联网 发布:linux安装hba卡驱动 编辑:程序博客网 时间:2024/05/22 10:29

打点工具:

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.apache.log4j.Logger;




public class PerformanceTsService {
private int valCnt = 1;
private long printPeriodMs = 0;
private Logger logger = null;
private boolean beUsed = true;
private Map<String, TsInfo> tsInfoList = new HashMap<String,TsInfo>();

public PerformanceTsService(Logger logger, int valCnt,long printPeriodSecs, boolean beUsed){
if (valCnt > 1){
this.valCnt = valCnt;
}
this.beUsed = beUsed;
this.logger = logger;
printPeriodMs = printPeriodSecs * 1000;
return;
}

public TsInfo getTsInfo(String key){
if (false == beUsed){
return null;
}
TsInfo ts = tsInfoList.get(key);
if (null == ts){
ts = allocateTsInfo(key);
}
return ts;
}

public void updateLastTs(TsInfo tsInfo){
if (null != tsInfo){
tsInfo.lastTs = new Date().getTime();
}
return;
}

public void addVal(TsInfo tsInfo){
if (null != tsInfo){
tsInfo.doAddVal(null);
}
return;
}

public TsInfo addVal(String key){
return addVal(key,null);
}

public TsInfo addVal(String key, Long startTs){
if (false == beUsed){
return null;
}
if ((null == key) || (key.isEmpty())){
return null;
}
TsInfo ts = tsInfoList.get(key);
if (null == ts){
ts = allocateTsInfo(key);
}
ts.doAddVal(startTs);
return ts;
}

private synchronized TsInfo allocateTsInfo(String key){
TsInfo ts = tsInfoList.get(key);
if (null == ts){
ts = new TsInfo(key);
tsInfoList.put(key, ts);
}
return ts;
}

public class TsItem{
long tsVal = 0;
long tsCnt = 0;
public TsItem(long initVal){
this.tsVal = initVal;
}
}


public class TsInfo{
private String key;
private long lastTs = 0;
private long lastPrintTs = 0;
private long totalTS = 0;
private long totalCnt = 0;
private List<TsItem> tsMinList;
private List<TsItem> tsMaxList;
public TsInfo(String key){
this.key = key;
tsMinList = new ArrayList<TsItem>(valCnt);
tsMaxList = new ArrayList<TsItem>(valCnt);
for (int i = 0; i < valCnt; i++){
tsMinList.add(new TsItem(Long.MAX_VALUE));
tsMaxList.add(new TsItem((long) -1));
}
}

private void doAddVal(Long startTs){
long curTs = new Date().getTime();
if (0 == lastTs){
lastTs = curTs;
lastPrintTs = curTs;
if (null == startTs){
return;
}
}

if (null != startTs){
lastTs = startTs.longValue();
}

if (curTs >= (lastPrintTs + printPeriodMs)){
printLog();
lastPrintTs = curTs;
}

long ts = curTs - lastTs;
if (ts < 0){
return;
}

totalTS += ts;
totalCnt += 1;
lastTs = curTs;

TsItem tsItem = null;
for (int i = 0; i < valCnt; i++){
if (tsMinList.get(i).tsVal == ts){
tsMinList.get(i).tsCnt++;
return;
}

if (null == tsItem){
tsItem = tsMinList.get(i);
}else if (tsItem.tsVal < tsMinList.get(i).tsVal){ //get max one
tsItem = tsMinList.get(i);
}
}

if ((null != tsItem) && (tsItem.tsVal > ts)){//replace this max one
tsItem.tsVal = ts;
tsItem.tsCnt = 1;
return;
}

tsItem = null;
for (int i = 0; i < valCnt; i++){
if (tsMaxList.get(i).tsVal == ts){
tsMaxList.get(i).tsCnt++;
return;
}

if (null == tsItem){
tsItem = tsMaxList.get(i);
}else if (tsItem.tsVal > tsMaxList.get(i).tsVal){ //get min one
tsItem = tsMaxList.get(i);
}
}

if ((null != tsItem) && (tsItem.tsVal < ts)){//replace this min one
tsItem.tsVal = ts;
tsItem.tsCnt = 1;
return;
}
return;
}

private void printLog(){
StringBuffer log = new StringBuffer();
log.append(key);
log.append(" has min values:");
long totalMaxVal = 0;
long totalMaxCnt = 0;
long totalMinVal = 0;
long totalMinCnt = 0;
for (int i = 0; i < valCnt; i++){
if (Long.MAX_VALUE == tsMinList.get(i).tsVal){
continue;
}
totalMinVal += (tsMinList.get(i).tsVal * tsMinList.get(i).tsCnt);
totalMinCnt += tsMinList.get(i).tsCnt;
log.append(" "+tsMinList.get(i).tsVal+"/"+tsMinList.get(i).tsCnt);
tsMinList.get(i).tsVal = Long.MAX_VALUE;
tsMinList.get(i).tsCnt = 0;
}
logger.info(log.toString());
log.setLength(0);

log.append(key);
log.append(" has max values:");
for (int i = 0; i < valCnt; i++){
if (-1 == tsMaxList.get(i).tsVal){
continue;
}
totalMaxVal += (tsMaxList.get(i).tsVal * tsMaxList.get(i).tsCnt);
totalMaxCnt += tsMaxList.get(i).tsCnt;
log.append(" "+tsMaxList.get(i).tsVal+"/"+tsMaxList.get(i).tsCnt);
tsMaxList.get(i).tsVal = -1;
tsMaxList.get(i).tsCnt = 0;
}
logger.info(log.toString());
log.setLength(0);

log.append(key+" has avg values:");
if (totalMinCnt >= 1){
log.append("min["+(totalMinVal/totalMinCnt)+"] ");
}
if (totalCnt >= 1){
log.append("avg["+(totalTS/totalCnt)+"] ");
}
if (totalMaxCnt >= 1){
log.append("max["+(totalMaxVal/totalMaxCnt)+"] ");
}
log.append("totalTS="+totalTS+" totalCnt="+totalCnt);
logger.info(log.toString());
log.setLength(0);

totalCnt = 0;
totalTS = 0;
}
}
}



统计工具:



import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.apache.log4j.Logger;


public class PerformanceStatService {
private int valCnt = 1;
private long printPeriodMs = 0;
private Logger logger = null;
private boolean beUsed = true;
private Map<String, StatInfo> statInfoList = new HashMap<String,StatInfo>();

public PerformanceStatService(Logger logger, int valCnt,long printPeriodSecs, boolean beUsed){
if (valCnt > 1){
this.valCnt = valCnt;
}
this.beUsed = beUsed;
this.logger = logger;
printPeriodMs = printPeriodSecs * 1000;
return;
}

public StatInfo addVal(String key, Long statVal){
if (false == beUsed){
return null;
}
if ((null == key) || (key.isEmpty())){
return null;
}
StatInfo ts = statInfoList.get(key);
if (null == ts){
ts = new StatInfo(key);
ts = addTsInfo(key, ts);
}
ts.doAddVal(statVal);
return ts;
}

private synchronized StatInfo addTsInfo(String key, StatInfo tsInfo){
StatInfo ts = statInfoList.get(key);
if (null == ts){
statInfoList.put(key, tsInfo);
ts = tsInfo;
}
return ts;
}

public class StatItem{
long statVal = 0;
long statCnt = 0;
public StatItem(long initVal){
this.statVal = initVal;
}
}


public class StatInfo{
private String key;
private long lastPrintTs = 0;
private long totalVal = 0;
private long totalCnt = 0;
private List<StatItem> minList;
private List<StatItem> maxList;
public StatInfo(String key){
this.key = key;
minList = new ArrayList<StatItem>(valCnt);
maxList = new ArrayList<StatItem>(valCnt);
for (int i = 0; i < valCnt; i++){
minList.add(new StatItem(Long.MAX_VALUE));
maxList.add(new StatItem((long) -1));
}
}

private void doAddVal(Long statVal){
long curTs = new Date().getTime();
if (0 == lastPrintTs){
lastPrintTs = curTs;
}else if (curTs >= (lastPrintTs + printPeriodMs)){
printLog();
lastPrintTs = curTs;
}

if (null == statVal){
return;
}
totalVal += statVal;
totalCnt += 1;

StatItem statItem = null;
for (int i = 0; i < valCnt; i++){
if (minList.get(i).statVal == statVal){
minList.get(i).statCnt++;
return;
}

if (null == statItem){
statItem = minList.get(i);
}else if (statItem.statVal < minList.get(i).statVal){ //get max one
statItem = minList.get(i);
}
}

if ((null != statItem) && (statItem.statVal > statVal)){//replace this max one
statItem.statVal = statVal;
statItem.statCnt = 1;
return;
}

statItem = null;
for (int i = 0; i < valCnt; i++){
if (maxList.get(i).statVal == statVal){
maxList.get(i).statCnt++;
return;
}

if (null == statItem){
statItem = maxList.get(i);
}else if (statItem.statVal > maxList.get(i).statVal){ //get min one
statItem = maxList.get(i);
}
}

if ((null != statItem) && (statItem.statVal < statVal)){//replace this min one
statItem.statVal = statVal;
statItem.statCnt = 1;
return;
}
return;
}

private void printLog(){
StringBuffer log = new StringBuffer();
log.append(key);
log.append(" has min values:");
long totalMaxVal = 0;
long totalMaxCnt = 0;
long totalMinVal = 0;
long totalMinCnt = 0;
for (int i = 0; i < valCnt; i++){
if (Long.MAX_VALUE == minList.get(i).statVal){
continue;
}
totalMinVal += (minList.get(i).statVal * minList.get(i).statCnt);
totalMinCnt += minList.get(i).statCnt;
log.append(" "+minList.get(i).statVal+"/"+minList.get(i).statCnt);
minList.get(i).statVal = Long.MAX_VALUE;
minList.get(i).statCnt = 0;
}
logger.info(log.toString());
log.setLength(0);

log.append(key);
log.append(" has max values:");
for (int i = 0; i < valCnt; i++){
if (-1 == maxList.get(i).statVal){
continue;
}
totalMaxVal += (maxList.get(i).statVal * maxList.get(i).statCnt);
totalMaxCnt += maxList.get(i).statCnt;
log.append(" "+maxList.get(i).statVal+"/"+maxList.get(i).statCnt);
maxList.get(i).statVal = -1;
maxList.get(i).statCnt = 0;
}
logger.info(log.toString());
log.setLength(0);

log.append(key+" has avg values:");
if (totalMinCnt >= 1){
log.append("min["+(totalMinVal/totalMinCnt)+"] ");
}
if (totalCnt >= 1){
log.append("avg["+(totalVal/totalCnt)+"] ");
}
if (totalMaxCnt >= 1){
log.append("max["+(totalMaxVal/totalMaxCnt)+"] ");
}
log.append("totalTS="+totalVal+" totalCnt="+totalCnt);
logger.info(log.toString());
log.setLength(0);

totalCnt = 0;
totalVal = 0;
}
}
}

原创粉丝点击