Maak een Bash- of PowerShell-script voor proactieve serverprestatieoptimalisatie
description
Met dit script kunt u de prestaties van uw server dynamisch optimaliseren, uitval verminderen en de resourcegebruik effectief verbeteren.
prompt
try_prompt
Help me een Bash- of PowerShell-script te ontwerpen dat de prestaties van mijn server proactief afstemt door verschillende parameters aan te passen op basis van realtime statistieken. Welke prestatietrends moeten worden gemon ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Bash-script dat de CPU-belasting monitort, de CPU-affiniteit aanpast indien nodig, en dit automatisch dagelijks om middernacht plant. Het script logt alle acties naar `/var/log/server_tuning.log`.
Let op: Dit is een basisvoorbeeld. Afhankelijk van je serverconfiguratie en vereisten moet je mogelijk extra parameters en beveiligingsmaatregelen toevoegen.
---
**Bash-script: server_tuning.sh**
```bash
#!/bin/bash
LOGFILE="/var/log/server_tuning.log"
# Functie om te loggen
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOGFILE"
}
# Monitor CPU-belasting (bijvoorbeeld over de afgelopen 1 minuut)
CPU_LOAD=$(awk '{print $1}' /proc/loadavg)
# Definieer drempelwaarden
THRESHOLD_HIGH=1.0
THRESHOLD_LOW=0.3
# Functie om CPU-affiniteit aan te passen
aanpassen_cpu_affiniteit() {
# Voorbeeld: CPU 0 en 1 toewijzen aan het proces met PID 1234
# Vervang '1234' door het daadwerkelijke proces dat je wilt optimaliseren
PID=$(pgrep -f "je_process_naam") # Vervang dit door je procesnaam
if [ -n "$PID" ]; then
# Stel CPU-affiniteit in (bijv. CPU 0 en 1)
taskset -cp 0,1 "$PID"
if [ $? -eq 0 ]; then
log "CPU-affiniteit voor PID $PID aangepast naar CPU 0,1"
else
log "Fout bij aanpassen CPU-affiniteit voor PID $PID"
fi
else
log "Proces niet gevonden voor CPU-affiniteit aanpassing"
fi
}
# Beslissingslogica op basis van CPU-belasting
if (( $(echo "$CPU_LOAD > $THRESHOLD_HIGH" |bc -l) )); then
log "CPU-belasting hoog ($CPU_LOAD), optimalisatie nodig"
aanpassen_cpu_affiniteit
elif (( $(echo "$CPU_LOAD < $THRESHOLD_LOW" |bc -l) )); then
log "CPU-belasting laag ($CPU_LOAD), geen actie"
else
log "CPU-belasting normaal ($CPU_LOAD), geen actie"
fi
```
---
**Cron-job voor dagelijkse planning:**
Voeg dit toe aan je crontab (via `crontab -e`):
```cron
0 0 * * * /path/naar/server_tuning.sh
```
**Belangrijk:**
- Zorg dat het script uitvoerbaar is: `chmod +x /path/naar/server_tuning.sh`
- Het script moet uitgevoerd worden met voldoende rechten om `taskset` te gebruiken en logs te schrijven naar `/var/log/`.
**Aanpassingen:**
- Vervang `"je_process_naam"` door de naam van het proces dat je wilt optimaliseren.
- Pas de CPU-drempelwaarden en affiniteitsinstellingen aan op basis van jouw server en workload.
- Overweeg additionele statistieken en parameters te monitoren, zoals RAM-gebruik, I/O-prestaties, etc.
---
Indien je PowerShell op Windows gebruikt, kan ik een vergelijkbaar script voor je maken.
provider: deepseek
model: deepseek-chat
Hier is een Bash-script dat voldoet aan uw vereisten:
```bash
#!/bin/bash
# Server Performance Tuner Script
# Logbestand: /var/log/server_tuning.log
LOG_FILE="/var/log/server_tuning.log"
MAX_CPU_LOAD=80 # Maximale CPU-belasting in percentage
MIN_CPU_LOAD=20 # Minimale CPU-belasting voor optimalisatie
# Logging functie
log_action() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
# CPU-belasting monitoren
get_cpu_load() {
local cpu_load
cpu_load=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
echo "${cpu_load%.*}"
}
# CPU-affiniteit aanpassen op basis van belasting
adjust_cpu_affinity() {
local cpu_load=$1
if (( $(echo "$cpu_load > $MAX_CPU_LOAD" | bc -l) )); then
log_action "Hoge CPU-belasting gedetecteerd: ${cpu_load}%"
# Processen met hoge CPU-belasting identificeren en affiniteit aanpassen
high_cpu_pids=$(ps -eo pid,%cpu --sort=-%cpu | awk '$2>10 {print $1}' | tail -n +2)
for pid in $high_cpu_pids; do
if [ -d "/proc/$pid" ]; then
taskset -cp 0-$(($(nproc)-1)) "$pid" >/dev/null 2>&1
log_action "CPU-affiniteit aangepast voor PID $pid (alle cores)"
fi
done
elif (( $(echo "$cpu_load < $MIN_CPU_LOAD" | bc -l) )); then
log_action "Lage CPU-belasting gedetecteerd: ${cpu_load}% - Optimalisatie mogelijk"
# Processen spreiden over beschikbare cores voor betere balans
active_pids=$(ps -eo pid --no-headers | head -20)
core=0
max_cores=$(($(nproc)-1))
for pid in $active_pids; do
if [ -d "/proc/$pid" ]; then
taskset -cp "$core" "$pid" >/dev/null 2>&1
log_action "PID $pid gebonden aan core $core"
core=$(( (core + 1) % max_cores ))
fi
done
else
log_action "CPU-belasting normaal: ${cpu_load}% - Geen aanpassingen nodig"
fi
}
# Hoofdfunctie
main_tuning() {
log_action "=== Server tuning gestart ==="
# CPU-belasting monitoren
current_cpu_load=$(get_cpu_load)
log_action "Huidige CPU-belasting: ${current_cpu_load}%"
# CPU-affiniteit aanpassen indien nodig
adjust_cpu_affinity "$current_cpu_load"
# Aanvullende systeemstatistieken loggen
memory_usage=$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2}')
load_average=$(uptime | awk -F'load average:' '{print $2}')
log_action "Geheugengebruik: $memory_usage"
log_action "Load average: $load_average"
log_action "=== Server tuning voltooid ==="
echo "" >> "$LOG_FILE"
}
# Script uitvoering
case "$1" in
--schedule)
# Planning instellen voor dagelijkse uitvoering om middernacht
if ! crontab -l | grep -q "$0"; then
(crontab -l 2>/dev/null; echo "0 0 * * * $0 --run") | crontab -
echo "Dagelijkse planning ingesteld om middernacht"
fi
;;
--run)
main_tuning
;;
*)
echo "Gebruik: $0 [OPTIE]"
echo "Opties:"
echo " --schedule Stel dagelijkse planning in om middernacht"
echo " --run Voer tuning direct uit"
echo ""
echo "Logbestand: $LOG_FILE"
;;
esac
```
## Installatie en gebruik:
1. **Script opslaan:**
```bash
sudo nano /usr/local/bin/server_tuner.sh
sudo chmod +x /usr/local/bin/server_tuner.sh
```
2. **bc package installeren (vereist voor berekeningen):**
```bash
sudo apt-get install bc # Debian/Ubuntu
# of
sudo yum install bc # RHEL/CentOS
```
3. **Direct uitvoeren:**
```bash
sudo ./server_tuner.sh --run
```
4. **Dagelijkse planning instellen:**
```bash
sudo ./server_tuner.sh --schedule
```
## Gemonitorde prestatietrends:
- **CPU-belasting** (real-time percentage)
- **Processen met hoge CPU-usage**
- **Geheugengebruik**
- **Load average**
## Afstemmingsacties:
- **Hoge belasting (>80%):** Processen spreiden over alle CPU-cores
- **Lage belasting (<20%):** Processen optimaliseren over beschikbare cores
- **Logging** van alle aanpassingen naar `/var/log/server_tuning.log`
## Planning:
- Dagelijkse uitvoering om **middernacht** via cron
- Handmatige uitvoering op elk moment mogelijk
Het script is veilig uitgevoerd en maakt alleen aanpassingen wanneer dit nodig is, met gedetailleerde logging van alle acties.

