[Unit] Description=DWS PDF/A-Validator (veraPDF) - Instanz %i Documentation=file:/var/www/html/dws/validator/README.md After=network.target [Service] Type=simple User=www-data Group=www-data # Ports, JAR-Dateiname und Uploadgrenze der Instanz EnvironmentFile=/var/www/html/dws/validator/instances/verapdf-%i.env # veraPDF legt beim Start seine Laufzeitkonfiguration (app.xml, validator.xml, features.xml, # fixer.xml, plugins.xml) in /config an und bricht sonst mit # IllegalArgumentException: IOException when creating: .../config/validator.xml # ab. Deshalb hat jede Instanz ein eigenes Arbeitsverzeichnis. Das ist bewusst NICHT # /var/www/html/dws/validator - dort liegt config/ mit den KoSIT-Szenarien, die veraPDF # sonst mit seinen eigenen Dateien auffuellen wuerde. WorkingDirectory=/var/www/html/dws/validator/verapdf/%i # Die JAR wird gegen das Validator-Verzeichnis aufgeloest, nicht gegen WorkingDirectory: # beide Instanzen teilen sich dieselbe Datei, koennen aber ueber ihre .env auf # unterschiedliche Versionen zeigen. # Ports und Bind-Adresse stehen in server.yml und werden von dort aus dem Environment # gefuellt - fehlt eine Variable, bricht der Start ab (siehe Kommentar in server.yml). ExecStart=/usr/bin/java \ -Xms128m -Xmx256m \ -jar /var/www/html/dws/validator/${DWS_VERAPDF_JAR_FILENAME} \ server /var/www/html/dws/validator/verapdf/server.yml Restart=always RestartSec=5 # Der Server hat 3,9 GB und keinen Swap; die beiden KoSIT-Instanzen belegen davon schon ~1,2 GB. # Gemessen (20 Pruefungen einer 1-MB-Rechnung, -Xmx384m): 61 MB Heap, 144 MB JVM gesamt, # 278 MB RSS - der Bedarf liegt also fast vollstaendig ausserhalb des Heaps. -Xmx256m laesst # reichlich Reserve und begrenzt zugleich den Ausreisser nach oben. # # MemoryMax ist die Versicherung dahinter: geht doch einmal etwas durch, raeumt der Cgroup # genau diese Instanz ab (Restart=always faengt sie wieder ein), statt dass der OOM-Killer # des Systems sich MySQL oder Apache aussucht. MemoryMax=600M # Start bis /healthcheck lokal ~4 s gemessen; der Server ist deutlich langsamer # (beim KoSIT-Validator Faktor 5). Reichlich Reserve, damit systemd keinen Fehlstart meldet. TimeoutStartSec=60 StandardOutput=journal StandardError=journal SyslogIdentifier=dws-verapdf-%i NoNewPrivileges=true PrivateTmp=true ProtectSystem=full ProtectHome=true [Install] WantedBy=multi-user.target