Ontwikkel een Bash of PowerShell Script voor Geautomatiseerde Serverprestatie Benchmarking
description
Met deze prompt kun je eenvoudig een script ontwikkelen dat de prestaties van je server automatisch meet en rapporteert. Dit helpt je om trends te monitoren, bottlenecks vroegtijdig te detecteren en de serverprestaties effectief te beheren zonder handmatige inspanning. Het is een praktische oplossing die tijd bespaart en de betrouwbaarheid van je serverbeheer verhoogt.
prompt
Help me een Bash of PowerShell script te maken dat automatische prestatiebenchmarks uitvoert op mijn server. Benchmark parameters: <voer de te meten prestatieparameters in zoals CPU, geheugen, schijfsnelheid> Testduur: <voer de duur van de ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Bash-script dat automatische prestatiebenchmarks uitvoert op je server, inclusief CPU- en geheugenbelasting, en dat automatisch wordt gepland om dagelijks om 02:00 uur.
**Stap 1: Bash-script maken (bijvoorbeeld: `/home/user/benchmark.sh`)**
```bash
#!/bin/bash
# Directory voor rapporten
REPORT_DIR="/var/log/benchmark"
mkdir -p "$REPORT_DIR"
# Tijdstempel
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
# Bestandsnaam
REPORT_FILE="$REPORT_DIR/benchmark_$TIMESTAMP.txt"
# Start van de test
echo "Benchmark rapport - $TIMESTAMP" > "$REPORT_FILE"
echo "====================================" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
# CPU belasting test (bijv. 1 uur met stress-ng)
echo "CPU belasting test (1 uur)..." >> "$REPORT_FILE"
stress-ng --cpu 4 --timeout 1h --metrics >> "$REPORT_FILE" 2>&1
# Geheugen belasting test (bijv. 1 uur met stress-ng)
echo "" >> "$REPORT_FILE"
echo "Geheugen belasting test (1 uur)..." >> "$REPORT_FILE"
stress-ng --vm 2 --vm-bytes 2G --timeout 1h --metrics >> "$REPORT_FILE" 2>&1
# Eventueel extra tests kunnen worden toegevoegd
echo "" >> "$REPORT_FILE"
echo "Test voltooid." >> "$REPORT_FILE"
```
**Stap 2: Script uitvoerbaar maken**
```bash
chmod +x /home/user/benchmark.sh
```
**Stap 3: Cron-job instellen voor dagelijkse uitvoering**
Voeg de volgende regel toe aan je crontab (bijvoorbeeld via `crontab -e`):
```cron
0 2 * * * /home/user/benchmark.sh
```
Dit zorgt dat het script elke dag om 02:00 uur wordt uitgevoerd.
**Opmerking:**
- Zorg dat `stress-ng` geïnstalleerd is: `sudo apt-get install stress-ng` (Debian/Ubuntu).
- Pas het aantal CPU-kernen (`--cpu 4`) en het geheugengebruik (`--vm-bytes 2G`) aan op basis van je servercapaciteit.
- Controleer of de gebruiker die de cron-job instelt voldoende rechten heeft.
Wil je dat ik ook een PowerShell-versie maak voor Windows?
provider: deepseek
model: deepseek-chat
Hier is een PowerShell script voor Windows Server dat automatische prestatiebenchmarks uitvoert:
```powershell
# benchmark-server.ps1
# Dagelijkse prestatiebenchmarks - uitgevoerd om 02:00 uur
param(
[int]$TestDuur = 3600, # 1 uur in seconden
[string]$RapportPad = "C:\BenchmarkRapporten\"
)
# Maak rapport directory aan
New-Item -ItemType Directory -Force -Path $RapportPad | Out-Null
$StartTijd = Get-Date
$RapportBestand = "$RapportPad\benchmark_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"
# Schrijf benchmark header
"=== SERVER PRESTATIE BENCHMARK RAPPORT ===" | Out-File -FilePath $RapportBestand -Encoding UTF8
"Starttijd: $StartTijd" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
"Testduur: $TestDuur seconden (1 uur)" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
"`n" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
# CPU Benchmark functie
function Test-CPUPrestatie {
param([int]$DuurSeconden)
"CPU Benchmark gestart..." | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
$CPUResultaten = @()
$EindTijd = (Get-Date).AddSeconds($DuurSeconden)
while ((Get-Date) -lt $EindTijd) {
$CPUUsage = (Get-Counter "\Processor(_Total)\% Processor Time" -SampleInterval 1 -MaxSamples 1).CounterSamples.CookedValue
$CPUResultaten += [PSCustomObject]@{
Tijd = Get-Date -Format "HH:mm:ss"
CPUUsage = [math]::Round($CPUUsage, 2)
}
Start-Sleep -Seconds 5 # Meet elke 5 seconden
}
return $CPUResultaten
}
# Geheugen Benchmark functie
function Test-GeheugenPrestatie {
param([int]$DuurSeconden)
"Geheugen Benchmark gestart..." | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
$GeheugenResultaten = @()
$EindTijd = (Get-Date).AddSeconds($DuurSeconden)
while ((Get-Date) -lt $EindTijd) {
$GeheugenUsage = (Get-Counter "\Memory\% Committed Bytes In Use" -SampleInterval 1 -MaxSamples 1).CounterSamples.CookedValue
$BeschikbaarGeheugen = (Get-Counter "\Memory\Available MBytes" -SampleInterval 1 -MaxSamples 1).CounterSamples.CookedValue
$GeheugenResultaten += [PSCustomObject]@{
Tijd = Get-Date -Format "HH:mm:ss"
GeheugenUsage = [math]::Round($GeheugenUsage, 2)
BeschikbaarMB = $BeschikbaarGeheugen
}
Start-Sleep -Seconds 10 # Meet elke 10 seconden
}
return $GeheugenResultaten
}
# Uitvoeren benchmarks
"=== CPU PRESTATIES ===" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
$CPUData = Test-CPUPrestatie -DuurSeconden $TestDuur
# Bereken CPU statistieken
$GemCPU = ($CPUData.CPUUsage | Measure-Object -Average).Average
$MaxCPU = ($CPUData.CPUUsage | Measure-Object -Maximum).Maximum
$MinCPU = ($CPUData.CPUUsage | Measure-Object -Minimum).Minimum
"Gemiddeld CPU gebruik: $([math]::Round($GemCPU, 2))%" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
"Maximum CPU gebruik: $([math]::Round($MaxCPU, 2))%" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
"Minimum CPU gebruik: $([math]::Round($MinCPU, 2))%" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
"`n" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
"=== GEHEUGEN PRESTATIES ===" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
$GeheugenData = Test-GeheugenPrestatie -DuurSeconden $TestDuur
# Bereken geheugen statistieken
$GemGeheugen = ($GeheugenData.GeheugenUsage | Measure-Object -Average).Average
$MaxGeheugen = ($GeheugenData.GeheugenUsage | Measure-Object -Maximum).Maximum
$GemBeschikbaar = ($GeheugenData.BeschikbaarMB | Measure-Object -Average).Average
"Gemiddeld geheugen gebruik: $([math]::Round($GemGeheugen, 2))%" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
"Maximum geheugen gebruik: $([math]::Round($MaxGeheugen, 2))%" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
"Gemiddeld beschikbaar geheugen: $([math]::Round($GemBeschikbaar, 2)) MB" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
"`n" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
# Systeeminformatie
"Systeeminformatie:" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
"Computer naam: $env:COMPUTERNAME" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
"OS Versie: $(Get-WmiObject Win32_OperatingSystem).Version" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
"Processor: $(Get-WmiObject Win32_Processor).Name" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
"Totaal geheugen: $([math]::Round((Get-WmiObject Win32_ComputerSystem).TotalPhysicalMemory/1GB, 2)) GB" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
$EindTijd = Get-Date
"Eindtijd: $EindTijd" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
"Totale benchmark duur: $((New-TimeSpan -Start $StartTijd -End $EindTijd).TotalMinutes) minuten" | Out-File -FilePath $RapportBestand -Append -Encoding UTF8
Write-Host "Benchmark voltooid! Rapport opgeslagen in: $RapportBestand"
```
**Planning instellen via Taakplanner:**
1. Open **Taakplanner** (Task Scheduler)
2. Klik op **Taak maken...** (Create Basic Task)
3. Naam: `Dagelijkse Server Benchmark`
4. Trigger: **Dagelijks** om **02:00**
5. Actie: **Programma starten**
6. Programma: `powershell.exe`
7. Argumenten: `-ExecutionPolicy Bypass -File "C:\pad\naar\benchmark-server.ps1"`
**Voor Linux/Bash gebruikers:**
```bash
#!/bin/bash
# benchmark-server.sh
TEST_DUUR=3600 # 1 uur
RAPPORT_DIR="/var/benchmark/rapporten/"
LOG_BESTAND="$RAPPORT_DIR/benchmark_$(date +%Y%m%d_%H%M%S).log"
mkdir -p "$RAPPORT_DIR"
# CPU benchmark met mpstat (sysstat package nodig)
cpu_benchmark() {
echo "=== CPU PRESTATIES ===" >> "$LOG_BESTAND"
mpstat 5 $((TEST_DUUR/5)) >> "$LOG_BESTAND" 2>&1 &
CPU_PID=$!
wait $CPU_PID
}
# Geheugen benchmark
geheugen_benchmark() {
echo "=== GEHEUGEN PRESTATIES ===" >> "$LOG_BESTAND"
vmstat 10 $((TEST_DUUR/10)) >> "$LOG_BESTAND" 2>&1
}
# Uitvoeren
{
echo "=== SERVER PRESTATIE BENCHMARK RAPPORT ==="
echo "Starttijd: $(date)"
echo "Testduur: $TEST_DUUR seconden"
echo ""
} > "$LOG_BESTAND"
cpu_benchmark &
geheugen_benchmark &
wait
echo "Benchmark voltooid: $LOG_BESTAND"
```
**Cron job voor planning:**
```bash
# Voeg toe aan crontab: crontab -e
0 2 * * * /pad/naar/benchmark-server.sh
```
Het script monitort CPU en geheugengebruik gedurende 1 uur en genereert een gedetailleerd rapport.