Starting the Platform
Once the repository and the server (backend + embedded frontend) are installed and configured, this page guides you through starting the platform and verifying that all components are running correctly.
Startup Order
PMP4PG has only two server-side components to start, in the following order:
1. PostgreSQL (repository)
2. PMP4PG Server (backend + embedded frontend)
There is no separate frontend service. The Angular frontend is embedded inside the pmp4pg.jar and served directly by the backend — starting pmp4pg starts both.
Step 1 — Start the Repository
# Start PostgreSQL
systemctl start postgresql-16 # Rocky Linux
# or
systemctl start postgresql # Ubuntu
# Verify it is running
systemctl status postgresql-16
# Test the repository connection
psql -U pmp4pg -h localhost -d metadata -c "SELECT version();"
Step 2 — Start the PMP4PG Server
systemctl start pmp4pg
# Check status
systemctl status pmp4pg
Expected output:
● pmp4pg.service - PMP4PG — PostgreSQL Workload Analyzer
Loaded: loaded (/usr/lib/systemd/system/pmp4pg.service; enabled; preset: disabled)
Active: active (running) since Fri 2026-06-26 23:02:48 CEST; 1min 8s ago
Docs: https://www.pmp4pg.com
Main PID: 718 (java)
Tasks: 38 (limit: 12115)
Memory: 340.6M
CPU: 18.521s
CGroup: /system.slice/pmp4pg.service
└─718 /usr/bin/java -Xms256m -Xmx512m -jar /usr/share/pmp4pg/pmp4pg.jar --spring.config.location=/etc/pmp4pg/application.properties
# Follow startup logs
journalctl -u pmp4pg -f --no-pager | head -30
# or directly from the log file
tail -f /var/log/pmp4pg/pmp4pg.log
API health check:
curl -s http://localhost:8080/pmp/actuator/health | python3 -m json.tool
# Expected: { "status": "UP" }
Frontend reachability check:
curl -o /dev/null -s -w "%{http_code}" http://localhost:8080/pmp/
# Expected: 200
By default, PMP4PG listens on port 8080 with no SSL. The full UI is accessible at http://<host>:8080/pmp. See Backend Installation for enabling HTTPS.
Full Platform Verification
| Component | Verification Command | Expected |
|---|---|---|
| Repository | pg_isready -U pmp4pg -d metadata | accepting connections |
| Server (API) | curl http://localhost:8080/pmp/actuator/health | {"status":"UP"} |
| Server (UI) | curl -o /dev/null -s -w "%{http_code}" http://localhost:8080/pmp/ | 200 |
If both components return the expected results, the platform is fully operational.
{screenshot: platform-all-systems-up}
Enabling Services on Boot
Make sure both services start automatically after a server reboot:
systemctl enable postgresql-16 # or postgresql
systemctl enable pmp4pg
systemctl enable --now pmp4pg enables and starts the service in a single command — see Backend Installation.
Stopping the Platform
systemctl stop pmp4pg
systemctl stop postgresql-16
Troubleshooting
Server fails to start
# Check full logs
journalctl -u pmp4pg --no-pager -n 100
# or
tail -100 /var/log/pmp4pg/pmp4pg.log
Common causes:
- Repository not reachable → verify PostgreSQL is running and credentials in
/etc/pmp4pg/application.propertiesare correct (db.url,db.username,db.password) - Port 8080 already in use →
ss -tlnp | grep 8080 - Wrong Java version →
java -version(Java 17+ required, installed automatically as an RPM dependency)
UI shows a blank page or assets fail to load
- Check browser console for errors (F12)
- Confirm the service is fully started — the embedded frontend is only served once the application context has fully initialized (
Started PmpApplication) - Verify you are accessing the correct context path:
http://<host>:8080/pmp/(trailing slash matters for some assets)
Cannot reach the platform from a remote browser
# Check firewall
firewall-cmd --list-all # Rocky Linux
# Open the listening port if needed
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
Next Steps
Now that the platform is running, deploy your first agent: