進階 CPU 使用率分析

資料範例

統計分析表

    • 主機 F12APDB1 統計過去 18 日內,CPU%>=72.040 發生 3 次,下個 18 日週期再發生機率為:

        • Probability(Host=F12APDB1, CPU%>=72.040 μ= 0.167, x>=3, term=18) = 84.651%

    • 主機 F12APDB2 統計過去 18 日內,CPU%>=0.124 發生 3 次,下個 18 日週期再發生機率為:

        • Probability(Host=F12APDB2, CPU%>= 0.124 μ= 0.200, x>=3, term=15) = 81.879%

GNU_R

library(DBI) library(RMySQL) library(car) GetDB <- function (SQL) { mySQL.Connection <- dbConnect(MySQL(), host=mySQL.Host, user=mySQL.User, password=mySQL.Password, db=mySQL.Schema) ResultSet <- dbGetQuery(mySQL.Connection, SQL) dbDisconnect(mySQL.Connection) ResultSet } SaveScatterPlotGraphics <- function(pngFileName, formula, graphicsTitle, graphicsXTitle, graphicsYTitle) { png(file=pngFileName) scatterplot(formula, reg.line=lm, smooth=TRUE, spread=TRUE, boxplots='xy', span=0.5, main=graphicsTitle, xlab=graphicsXTitle, ylab=graphicsYTitle) dev.off() } PrintANOVA <- function (formula, heading) { cat(paste("ANOVA(", heading, ")", sep="")) cat("\n") R.ANOVA.CPU_USER = aov(formula) summary(R.ANOVA.CPU_USER) print(model.tables(R.ANOVA.CPU_USER, "means"), digits=3) cat("\n\n") } mySQL.Host <- "127.0.0.1" mySQL.User <- "nmon" mySQL.Password <- "nmon" mySQL.Schema <- "nmon" R.Chart.Folder <- "/var/nmon/Results/Graphics" R.Analysis.Folder <- "/var/nmon/Results/Analysis" mySQL.SQL <- paste("SELECT DISTINCT DATE(ZZZZ) AS TXN_DATE FROM ",

mySQL.Schema, ".cpu_all ORDER BY ZZZZ LIMIT 30", sep="") mySQL.DATA <- GetDB(mySQL.SQL) Date.Start <- mySQL.DATA$TXN_DATE[1] Date.End <- mySQL.DATA$TXN_DATE[length(mySQL.DATA$TXN_DATE)] mySQL.SQL <- paste("SELECT HOSTNAME, TO_DAYS(ZZZZ) AS TXN_DATE,

AVG(USER_PCT+WAIT_PCT+SYS_PCT) AS CPU_USAGE FROM ", mySQL.Schema, ".cpu_all WHERE DATE(ZZZZ) BETWEEN '", Date.Start, "' AND '", Date.End, "' GROUP BY HOSTNAME, DATE(ZZZZ) ORDER BY HOSTNAME, DATE(ZZZZ)", sep="") mySQL.DATA <- GetDB(mySQL.SQL) HOST_LIST <- unique(mySQL.DATA$HOSTNAME) sink(paste(R.Analysis.Folder, "/", "HIGH_HOST_CPU.txt", sep="")) for (myHost in HOST_LIST) { mySQL.SUB_DATA <- subset(mySQL.DATA, HOSTNAME==myHost) TOTAL_COUNT <- length(mySQL.SUB_DATA$CPU_USAGE) TXN_DATE <- (mySQL.SUB_DATA$TXN_DATE) HOSTNAME <- (mySQL.SUB_DATA$HOSTNAME) CPU_USAGE <- (mySQL.SUB_DATA$CPU_USAGE) HIGH_CPU_USAGE <- summary(CPU_USAGE)[5] # 3rd Quantitile HIGH_CPU_COUNT <- length(subset(mySQL.SUB_DATA, CPU_USAGE>=HIGH_CPU_USAGE)) u <- HIGH_CPU_COUNT / TOTAL_COUNT total_p <- 0 for (x in seq(1:HIGH_CPU_COUNT)) { p <- ((u^x) * exp(-u)) / factorial(x) total_p <- total_p + p } cat(sprintf("Probability(Host=%s, CPU%%>=%6.3f μ=%6.3f, x>=%d, term=%d) = %.3f%%\n",

myHost, HIGH_CPU_USAGE, u, HIGH_CPU_COUNT, TOTAL_COUNT, (1 - total_p)*100)) } sink() rm(list=(ls()))