System Performance Monitor

advanced low risk System Maintenance

Description

Monitor system performance metrics and generate health reports

Prerequisites

  • System monitoring access
  • Performance baseline data
  • Alert configuration

Parameters

monitoringDuration

Number

Duration in minutes to monitor system

Default: 60

generateReport

Boolean

Generate detailed performance report

Default: true

alertThreshold

Number

CPU usage threshold for alerts (percentage)

Default: 80

Script Code

import java.lang.management.ManagementFactory
import java.lang.management.MemoryMXBean
import java.lang.management.OperatingSystemMXBean
import java.lang.management.ThreadMXBean

def monitoringDuration = parameters.monitoringDuration ?: 60
def generateReport = parameters.generateReport ?: true
def alertThreshold = parameters.alertThreshold ?: 80

def errors = []
def performanceData = [:]

try {
    def startTime = System.currentTimeMillis()
    def endTime = startTime + (monitoringDuration * 60 * 1000)
    
    println "Starting system performance monitoring for $monitoringDuration minutes..."
    
    while (System.currentTimeMillis() < endTime) {
        def currentTime = new Date()
        
        // Collect system metrics
        def memoryBean = ManagementFactory.getMemoryMXBean()
        def osBean = ManagementFactory.getOperatingSystemMXBean()
        def threadBean = ManagementFactory.getThreadMXBean()
        
        def heapUsed = memoryBean.heapMemoryUsage.used
        def heapMax = memoryBean.heapMemoryUsage.max
        def heapUsedPercent = (heapUsed / heapMax) * 100
        
        def cpuUsage = osBean.processCpuLoad * 100
        def threadCount = threadBean.threadCount
        
        def metrics = [
            timestamp: currentTime,
            heapUsed: heapUsed,
            heapMax: heapMax,
            heapUsedPercent: heapUsedPercent,
            cpuUsage: cpuUsage,
            threadCount: threadCount
        ]
        
        performanceData[currentTime] = metrics
        
        // Check for alerts
        if (cpuUsage > alertThreshold) {
            println "ALERT: High CPU usage detected: $cpuUsage%"
        }
        
        if (heapUsedPercent > 90) {
            println "ALERT: High memory usage detected: $heapUsedPercent%"
        }
        
        // Wait before next measurement
        Thread.sleep(30000) // 30 seconds
    }
    
    if (generateReport) {
        generatePerformanceReport(performanceData)
    }
    
    println "Performance monitoring completed successfully"
    
} catch (Exception e) {
    errors.add("Performance monitoring failed: $e.message")
}

def generatePerformanceReport(data) {
    println "\n=== PERFORMANCE REPORT ==="
    println "Monitoring period: $monitoringDuration minutes"
    println "Total measurements: $data.size()"
    
    def avgCpuUsage = data.values().collect { it.cpuUsage }.sum() / data.size()
    def avgMemoryUsage = data.values().collect { it.heapUsedPercent }.sum() / data.size()
    def maxCpuUsage = data.values().collect { it.cpuUsage }.max()
    def maxMemoryUsage = data.values().collect { it.heapUsedPercent }.max()
    
    println "Average CPU Usage: " + String.format("%.2f", avgCpuUsage) + "%"
    println "Average Memory Usage: " + String.format("%.2f", avgMemoryUsage) + "%"
    println "Peak CPU Usage: " + String.format("%.2f", maxCpuUsage) + "%"
    println "Peak Memory Usage: " + String.format("%.2f", maxMemoryUsage) + "%"
    
    if (avgCpuUsage > 70) {
        println "WARNING: High average CPU usage detected"
    }
    
    if (avgMemoryUsage > 80) {
        println "WARNING: High average memory usage detected"
    }
}

Script Information

Author:SAP Commerce Team
Execution Time:1-60 minutes
Rating:4.8/5
Downloads:1100
Last Updated:2024-01-16
Version:1.4.0

Tags

performance monitoring system health metrics