Troubleshooting¶
Common issues and solutions.
Quick Diagnostics¶
# Check if server is running
curl http://localhost:7474/health
# Check logs
docker logs nornicdb
# or
journalctl -u nornicdb -n 100
# Check resources
docker stats nornicdb
# or
htop
Connection Issues¶
Cannot Connect to Server¶
Symptoms: - Connection refused - Timeout
Solutions:
-
Check if server is running:
-
Check bind address:
-
Check ports:
-
Check firewall:
Connection Reset¶
Symptoms: - Intermittent disconnects - "Connection reset by peer"
Solutions:
-
Check rate limiting:
-
Increase limits:
Authentication Issues¶
401 Unauthorized¶
Symptoms: - All requests return 401
Solutions:
-
Check token:
-
Check auth is disabled (dev only):
-
Check JWT secret:
403 Forbidden¶
Symptoms: - Authenticated but access denied
Solutions:
-
Check user role:
-
Check endpoint permissions:
/statusrequiresreadpermission/metricsrequiresreadpermission- Admin endpoints require
adminpermission
Performance Issues¶
Slow Queries¶
Symptoms: - High latency - Timeouts
Solutions:
-
Enable query caching:
-
Check query complexity:
-
Add indexes:
-
Enable parallel execution:
Maximum query/content size (MCP + embeddings)¶
If you are using the MCP tools (store, discover, etc.):
- HTTP request size: MCP limits request bodies via
MaxRequestSize(default 10MB). - Applies to
/mcp,/mcp/tools/call, and/mcp/initialize. - Embedding input limits: the effective max “query size” for vector search is bounded by the embedding model context.
- For local GGUF embeddings, long queries are chunked into embedding-safe pieces and searched across all chunks (results are fused), so vector search can still work with paragraph-sized queries.
- Stored content: large content is chunked for embeddings (default 512 tokens per chunk with overlap), but very large payloads will increase background embedding work.
High Memory Usage¶
Symptoms: - OOM errors (exit code 137 in Docker) - Container restarts repeatedly - Slow performance
Solutions:
- Enable Low Memory Mode (recommended):
See Low Memory Mode Guide for details.
-
Increase GC frequency:
-
Enable object pooling:
-
Docker: Increase memory limit:
-
Docker: Check for WAL bloat:
# Large WAL files can cause OOM on startup du -sh /path/to/data/wal/ # If >1GB, consider trimming it. # # NOTE: Deleting the WAL can lose the *very latest* mutations if the process # crashed after WAL append but before the change was applied to the main store. # Prefer auto-recovery (snapshot + WAL) when possible. rm /path/to/data/wal/wal.log
Data Integrity / Recovery¶
Server won't start until data is deleted (corruption after crash)¶
Typical trigger: - Hard kills (OOM / docker kill -9), GPU/CGO segfaults, host power loss, or storage hiccups.
What to do:
-
Do not delete your data directory. Instead, back it up first.
-
Use snapshot + WAL recovery (Neo4j-style “tx log recovery”)
NornicDB maintains: - Snapshots in <dataDir>/snapshots/ (e.g., snapshot-YYYYMMDD-HHMMSS.json) - WAL in <dataDir>/wal/wal.log
Auto-recovery (recommended)
Auto-recovery is enabled by default. You can: - Disable: NORNICDB_AUTO_RECOVER_ON_CORRUPTION=false - Force an attempt (even if the open error message doesn’t match the corruption heuristics): NORNICDB_AUTO_RECOVER_ON_CORRUPTION=true
On startup, NornicDB will: - Repair the WAL tail if the previous process crashed mid-write - Load the latest snapshot (if present) - Replay WAL entries after that snapshot (or replay WAL-only if no snapshots exist yet) - Rename your original directory to <dataDir>.corrupted-<timestamp> (for forensics) - Rebuild a fresh store and restore recovered nodes/edges
-
If recovery can’t run
-
Ensure the container has write access to the volume
- Ensure at least one recovery artifact exists:
- snapshots in
<dataDir>/snapshots/, and/or - WAL in
<dataDir>/wal/(wal.logor sealedsegments/seg-*.wal) - Avoid running the DB data directory on unstable/union filesystem mounts (prefer a dedicated disk path)
High CPU Usage¶
Symptoms: - CPU at 100% - Slow responses
Solutions:
-
Limit parallel workers:
-
Check for expensive queries:
-
Check embedding queue:
Data Issues¶
Data Not Persisting¶
Symptoms: - Data lost on restart
Solutions:
-
Check volume mount:
-
Check data directory:
-
Check disk space:
Corrupted Data¶
Symptoms: - Read errors - Inconsistent results
Solutions:
-
Verify data:
-
Restore from backup:
-
Rebuild indexes:
Embedding Issues¶
Embeddings Not Generating¶
Symptoms: - Nodes without embeddings - Search not working
Solutions:
-
Check embedding service:
-
Check configuration:
-
Check pending queue:
-
Trigger regeneration:
Docker Issues¶
Container Won't Start¶
Solutions:
-
Check logs:
-
Check image:
-
Check resources:
Permission Denied¶
Solutions:
-
Fix volume permissions:
-
Run as root (not recommended):
Getting Help¶
Collect Diagnostics¶
# System info
uname -a
docker version
go version
# NornicDB info
curl http://localhost:7474/status
# Logs
docker logs nornicdb > nornicdb.log 2>&1
Log Locations¶
| Deployment | Location |
|---|---|
| Docker | docker logs nornicdb |
| Systemd | journalctl -u nornicdb |
| Binary | ./nornicdb.log |
See Also¶
- Monitoring - Health monitoring
- Deployment - Deployment guide
- Scaling - Performance tuning