🔧 Aktualisierung der Backend-Logik und Optimierung der SQLite-Datenbankkonfiguration für Raspberry Pi: Hinzufügen spezifischer Optimierungen, Verbesserung der Fehlerbehandlung und Protokollierung. Einführung von Caching-Mechanismen und Anpassungen für schwache Hardware. 📈
This commit is contained in:
329
backend/docs/RASPBERRY_PI_OPTIMIERUNG.md
Normal file
329
backend/docs/RASPBERRY_PI_OPTIMIERUNG.md
Normal file
@@ -0,0 +1,329 @@
|
||||
# MYP Platform - Raspberry Pi Performance Optimierung
|
||||
|
||||
## Übersicht
|
||||
|
||||
Diese Dokumentation beschreibt die implementierten Performance-Optimierungen für die MYP Flask-Webapp, um eine optimale Leistung auf Raspberry Pi Hardware zu gewährleisten.
|
||||
|
||||
## Implementierte Optimierungen
|
||||
|
||||
### 1. Kernel- und System-Optimierungen (setup.sh)
|
||||
|
||||
#### Kernel-Parameter
|
||||
```bash
|
||||
# Memory Management
|
||||
vm.swappiness=10 # Reduzierte Swap-Nutzung
|
||||
vm.dirty_ratio=5 # Frühere Disk-Writes
|
||||
vm.dirty_background_ratio=2 # Hintergrund-Writes
|
||||
vm.vfs_cache_pressure=50 # Ausgewogenes Cache-Verhalten
|
||||
|
||||
# CPU Scheduler
|
||||
kernel.sched_migration_cost_ns=5000000 # Reduzierte CPU-Migration
|
||||
kernel.sched_autogroup_enabled=0 # Deaktivierte Auto-Gruppierung
|
||||
|
||||
# Filesystem (SD-Card optimiert)
|
||||
vm.dirty_expire_centisecs=500 # Schnellere Daten-Expiration
|
||||
vm.dirty_writeback_centisecs=100 # Häufigere Writebacks
|
||||
```
|
||||
|
||||
#### Service-Deaktivierung
|
||||
- `bluetooth.service` - Bluetooth-Dienst
|
||||
- `cups.service` - Druckerdienst (nicht benötigt)
|
||||
- `avahi-daemon.service` - mDNS-Dienst
|
||||
- `ModemManager.service` - Modem-Manager
|
||||
- `wpa_supplicant.service` - WiFi falls Ethernet verwendet
|
||||
|
||||
#### tmpfs-Optimierung
|
||||
```bash
|
||||
# Temporäre Dateien im RAM
|
||||
/tmp tmpfs defaults,noatime,nosuid,size=100M 0 0
|
||||
/var/tmp tmpfs defaults,noatime,nosuid,size=50M 0 0
|
||||
/var/log tmpfs defaults,noatime,nosuid,size=50M 0 0
|
||||
```
|
||||
|
||||
### 2. Python/Flask-Optimierungen (app.py)
|
||||
|
||||
#### Speicher-Management
|
||||
```python
|
||||
# Garbage Collection optimiert
|
||||
gc.set_threshold(700, 10, 10) # Häufigere Bereinigung
|
||||
gc.collect() # Initial cleanup
|
||||
|
||||
# Memory Limits
|
||||
resource.setrlimit(resource.RLIMIT_AS, (256 * 1024 * 1024, 256 * 1024 * 1024))
|
||||
```
|
||||
|
||||
#### Flask-Konfiguration
|
||||
```python
|
||||
# Performance-Optimierungen
|
||||
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 31536000 # 1 Jahr Cache
|
||||
app.config['JSON_SORT_KEYS'] = False
|
||||
app.config['JSONIFY_PRETTYPRINT_REGULAR'] = False
|
||||
app.config['TEMPLATES_AUTO_RELOAD'] = False
|
||||
```
|
||||
|
||||
#### API-Optimierungen
|
||||
- **Pagination**: Maximale 50 Items pro Request
|
||||
- **Lazy Loading**: Bedarfsgerechtes Laden von Daten
|
||||
- **Cache Headers**: Aggressive Caching-Strategien
|
||||
- **Response Compression**: Gzip-Kompression für alle Responses
|
||||
|
||||
### 3. Datenbank-Optimierungen (models.py)
|
||||
|
||||
#### SQLite-Konfiguration für Raspberry Pi
|
||||
```python
|
||||
# Reduzierte Cache-Größen
|
||||
'pool_pre_ping': True,
|
||||
'pool_recycle': 300,
|
||||
'connect_args': {
|
||||
'check_same_thread': False,
|
||||
'timeout': 30, # Längere Timeouts für SD-Karten
|
||||
'cached_statements': 100,
|
||||
'isolation_level': None,
|
||||
'sqlite_additional_pragmas': {
|
||||
'cache_size': -32000, # 32MB Cache (reduziert)
|
||||
'mmap_size': 134217728, # 128MB Memory-mapped I/O
|
||||
'page_size': 4096, # SD-Card optimiert
|
||||
'wal_autocheckpoint': 100, # Häufigere WAL-Checkpoints
|
||||
'max_wal_size': 33554432 # 32MB WAL-Limit
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Connection Pooling
|
||||
- **Pool Size**: 3 Verbindungen (reduziert)
|
||||
- **Pool Recycle**: 300 Sekunden
|
||||
- **Timeouts**: 30 Sekunden für SD-Karten-Latenz
|
||||
|
||||
### 4. Frontend-Optimierungen
|
||||
|
||||
#### Critical CSS (critical.min.css)
|
||||
- **Inline-CSS**: Kritische Styles für First Paint
|
||||
- **Minimiert**: Nur essentielle Styles (2.4KB)
|
||||
- **Mobile-First**: Responsive Design optimiert
|
||||
|
||||
#### JavaScript-Loader (loader.min.js)
|
||||
- **Lazy Loading**: JavaScript nach User-Interaktion
|
||||
- **Cache-Strategie**: Intelligent caching mit Service Worker
|
||||
- **Minimiert**: Kompakte 1.8KB Datei
|
||||
- **SPA-Navigation**: Client-side Routing für bessere Performance
|
||||
|
||||
#### Service Worker (sw-optimized.js)
|
||||
- **Cache-Limit**: Maximal 50 Einträge für Raspberry Pi
|
||||
- **Intelligente Strategien**:
|
||||
- API: Network First mit Cache Fallback
|
||||
- Statische Assets: Cache First
|
||||
- HTML-Seiten: Network First mit Cache Fallback
|
||||
- **Hintergrund-Sync**: Automatische Datensynchronisation
|
||||
- **Offline-Support**: Vollständige Offline-Funktionalität
|
||||
|
||||
#### Performance Features
|
||||
```javascript
|
||||
// Debounce für Events
|
||||
MYP.debounce(func, 250);
|
||||
|
||||
// Throttle für Scroll-Events
|
||||
MYP.throttle(func, 100);
|
||||
|
||||
// Lazy Image Loading
|
||||
MYP.lazyImages();
|
||||
|
||||
// Cache-Management
|
||||
MYP.cache(url);
|
||||
MYP.store(url, data);
|
||||
```
|
||||
|
||||
### 5. Build-System-Optimierungen
|
||||
|
||||
#### Asset-Kompression
|
||||
```bash
|
||||
# Gzip-Kompression für statische Dateien
|
||||
find static/ -name "*.css" -o -name "*.js" | xargs gzip -k -9
|
||||
|
||||
# CSS-Minimierung
|
||||
npx tailwindcss build -i input.css -o critical.min.css --minify
|
||||
|
||||
# JavaScript-Minimierung
|
||||
npx terser app.js -c -m -o loader.min.js
|
||||
```
|
||||
|
||||
#### Package-Management
|
||||
- **Spezifische Versionen**: Locked versions in package.json
|
||||
- **Minimal Dependencies**: Nur benötigte Pakete
|
||||
- **Production Build**: Optimierte Builds für Deployment
|
||||
|
||||
## Performance-Metriken
|
||||
|
||||
### Erwartete Verbesserungen
|
||||
- **Ladezeit**: 40-60% Reduktion
|
||||
- **Speicherverbrauch**: 30-40% Reduktion
|
||||
- **CPU-Last**: 25-35% Reduktion
|
||||
- **Netzwerk-Traffic**: 50-70% Reduktion (durch Caching)
|
||||
|
||||
### Monitoring
|
||||
```javascript
|
||||
// Performance-Monitoring in base.html
|
||||
window.addEventListener('load', function() {
|
||||
const loadTime = performance.timing.loadEventEnd - performance.timing.navigationStart;
|
||||
if (loadTime > 3000) {
|
||||
console.warn('Langsame Ladezeit:', loadTime + 'ms');
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
## Installation und Verwendung
|
||||
|
||||
### Automatische Installation
|
||||
```bash
|
||||
# Vollständige Installation mit Performance-Optimierungen
|
||||
sudo ./setup.sh
|
||||
|
||||
# Nur Performance-Optimierungen anwenden
|
||||
sudo ./setup.sh --performance-only
|
||||
```
|
||||
|
||||
### Manuelle Konfiguration
|
||||
|
||||
#### 1. Kernel-Parameter anwenden
|
||||
```bash
|
||||
sudo sysctl -p /etc/sysctl.d/99-myp-performance.conf
|
||||
```
|
||||
|
||||
#### 2. systemd-Dienste deaktivieren
|
||||
```bash
|
||||
sudo systemctl disable bluetooth cups avahi-daemon
|
||||
```
|
||||
|
||||
#### 3. tmpfs mounten
|
||||
```bash
|
||||
sudo mount -a
|
||||
```
|
||||
|
||||
#### 4. Python-Optimierungen aktivieren
|
||||
```bash
|
||||
export PYTHONOPTIMIZE=2
|
||||
export PYTHONDONTWRITEBYTECODE=1
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Häufige Probleme
|
||||
|
||||
#### 1. Hoher Speicherverbrauch
|
||||
```bash
|
||||
# Memory-Monitoring
|
||||
free -h
|
||||
sudo systemctl status myp-webapp
|
||||
|
||||
# Log-Analyse
|
||||
tail -f logs/app/app.log
|
||||
```
|
||||
|
||||
#### 2. Langsame Datenbankoperationen
|
||||
```bash
|
||||
# SQLite-Performance prüfen
|
||||
sqlite3 instance/myp.db ".timer on" "PRAGMA cache_size;"
|
||||
|
||||
# Index-Optimierung
|
||||
sqlite3 instance/myp.db "ANALYZE;"
|
||||
```
|
||||
|
||||
#### 3. Service Worker Probleme
|
||||
```javascript
|
||||
// Browser-Konsole
|
||||
navigator.serviceWorker.getRegistrations().then(function(registrations) {
|
||||
registrations.forEach(function(registration) {
|
||||
console.log('SW:', registration.scope, registration.active.state);
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
### Performance-Debugging
|
||||
|
||||
#### 1. Network-Tab
|
||||
- Prüfe Cache-Headers
|
||||
- Identifiziere langsame Requests
|
||||
- Überwache Transfer-Größen
|
||||
|
||||
#### 2. Performance-Tab
|
||||
- Messe JavaScript-Ausführungszeit
|
||||
- Identifiziere Layout-Thrashing
|
||||
- Überwache Memory-Leaks
|
||||
|
||||
#### 3. Server-Logs
|
||||
```bash
|
||||
# Flask-Performance-Logs
|
||||
tail -f logs/app/performance.log
|
||||
|
||||
# System-Performance
|
||||
htop
|
||||
iotop -a
|
||||
```
|
||||
|
||||
## Wartung
|
||||
|
||||
### Tägliche Tasks
|
||||
```bash
|
||||
# Cache-Bereinigung (automatisch via Cron)
|
||||
0 2 * * * /usr/local/bin/cleanup-cache.sh
|
||||
|
||||
# Log-Rotation
|
||||
0 0 * * * /usr/sbin/logrotate /etc/logrotate.d/myp-webapp
|
||||
```
|
||||
|
||||
### Wöchentliche Tasks
|
||||
```bash
|
||||
# Datenbank-Optimierung
|
||||
0 1 * * 0 sqlite3 /path/to/myp.db "VACUUM; ANALYZE;"
|
||||
|
||||
# System-Update mit Performance-Check
|
||||
0 3 * * 0 /usr/local/bin/system-maintenance.sh
|
||||
```
|
||||
|
||||
### Monitoring
|
||||
```bash
|
||||
# Performance-Metriken sammeln
|
||||
*/5 * * * * /usr/local/bin/collect-metrics.sh
|
||||
|
||||
# Alert bei schlechter Performance
|
||||
*/10 * * * * /usr/local/bin/performance-alert.sh
|
||||
```
|
||||
|
||||
## Weitere Optimierungen
|
||||
|
||||
### Hardware-spezifisch
|
||||
- **SD-Karte**: Class 10 oder besser verwenden
|
||||
- **RAM**: Mindestens 2GB empfohlen für bessere Performance
|
||||
- **CPU**: Übertaktung wenn Kühlung ausreichend
|
||||
|
||||
### Netzwerk
|
||||
- **Ethernet**: Bevorzugt gegenüber WiFi
|
||||
- **QoS**: Traffic-Priorisierung für kritische Services
|
||||
- **DNS**: Lokaler DNS-Cache (unbound)
|
||||
|
||||
### Erweiterte Optimierungen
|
||||
- **Redis**: Externes Caching für Skalierung
|
||||
- **nginx**: Reverse Proxy für statische Assets
|
||||
- **Load Balancer**: Mehrere Raspberry Pi für High Availability
|
||||
|
||||
## Backup und Recovery
|
||||
|
||||
### Automatisches Backup
|
||||
```bash
|
||||
# Tägliches Backup mit Kompression
|
||||
0 1 * * * /usr/local/bin/backup-myp.sh --compress --performance-optimized
|
||||
```
|
||||
|
||||
### Recovery-Prozess
|
||||
```bash
|
||||
# Schnelle Wiederherstellung
|
||||
sudo ./setup.sh --restore-from-backup --performance-mode
|
||||
|
||||
# Performance-Check nach Restore
|
||||
sudo ./setup.sh --performance-check
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Erstellt**: $(date '+%Y-%m-%d %H:%M:%S')
|
||||
**Version**: 1.0
|
||||
**Status**: Produktionsbereit
|
||||
Reference in New Issue
Block a user