Common issues and solutions.
# 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
htopSymptoms:
- Connection refused
- Timeout
Solutions:
-
Check if server is running:
curl http://localhost:7474/health
-
Check bind address:
# Docker requires 0.0.0.0 NORNICDB_ADDRESS=0.0.0.0 -
Check ports:
netstat -tlnp | grep 7474 -
Check firewall:
sudo ufw status sudo firewall-cmd --list-ports
Symptoms:
- Intermittent disconnects
- "Connection reset by peer"
Solutions:
-
Check rate limiting:
# View rate limit hits curl http://localhost:7474/metrics | grep rate_limit
-
Increase limits:
rate_limiting: per_minute: 200 per_hour: 6000
Symptoms:
- All requests return 401
Solutions:
-
Check token:
# Get new token curl -X POST http://localhost:7474/auth/token \ -d "grant_type=password&username=admin&password=admin"
-
Check auth is disabled (dev only):
NORNICDB_NO_AUTH=true
-
Check JWT secret:
# Must be at least 32 characters NORNICDB_JWT_SECRET="your-32-character-secret-key-here"
Symptoms:
- Authenticated but access denied
Solutions:
-
Check user role:
# User needs appropriate permissions nornicdb user update alice --role editor -
Check endpoint permissions:
/statusrequiresreadpermission/metricsrequiresreadpermission- Admin endpoints require
adminpermission
Symptoms:
- High latency
- Timeouts
Solutions:
-
Enable query caching:
nornicdb serve --query-cache-size=5000
-
Check query complexity:
// Bad: Unbounded traversal MATCH (n)-[*]->(m) RETURN n, m // Good: Limited depth MATCH (n)-[*1..3]->(m) RETURN n, m LIMIT 100
-
Add indexes:
CREATE INDEX FOR (n:Person) ON (n.email)
-
Enable parallel execution:
nornicdb serve --parallel=true
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.
- Applies to
- 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.
Symptoms:
- OOM errors (exit code 137 in Docker)
- Container restarts repeatedly
- Slow performance
Solutions:
-
Enable Low Memory Mode (recommended):
# Reduces BadgerDB RAM from ~1GB to ~50MB nornicdb serve --low-memory # Or via environment variable NORNICDB_LOW_MEMORY=true nornicdb serve
See Low Memory Mode Guide for details.
-
Increase GC frequency:
nornicdb serve --gc-percent=50
-
Enable object pooling:
nornicdb serve --pool-enabled=true
-
Docker: Increase memory limit:
deploy: resources: limits: memory: 4G
-
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
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
NORNICDB_AUTO_RECOVER_ON_CORRUPTION=trueOn 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)
- snapshots in
- Avoid running the DB data directory on unstable/union filesystem mounts (prefer a dedicated disk path)
Symptoms:
- CPU at 100%
- Slow responses
Solutions:
-
Limit parallel workers:
nornicdb serve --parallel-workers=2
-
Check for expensive queries:
# Enable query logging nornicdb serve --log-queries -
Check embedding queue:
curl http://localhost:7474/status | jq .embeddings
Symptoms:
- Data lost on restart
Solutions:
-
Check volume mount:
docker inspect nornicdb | grep Mounts -
Check data directory:
ls -la /data
-
Check disk space:
df -h
Symptoms:
- Read errors
- Inconsistent results
Solutions:
-
Verify data:
nornicdb verify --check-all
-
Restore from backup:
nornicdb restore --input backup.tar.gz
-
Rebuild indexes:
nornicdb admin rebuild-indexes
Symptoms:
- Nodes without embeddings
- Search not working
Solutions:
-
Check embedding service:
curl http://localhost:11434/api/embed \ -d '{"model":"mxbai-embed-large","input":"test"}' -
Check configuration:
NORNICDB_EMBEDDING_URL=http://ollama:11434 NORNICDB_EMBEDDING_MODEL=mxbai-embed-large
-
Check pending queue:
curl http://localhost:7474/status | jq .embeddings.pending -
Trigger regeneration:
curl -X POST http://localhost:7474/nornicdb/embed/trigger?regenerate=true
Solutions:
-
Check logs:
docker logs nornicdb
-
Check image:
docker pull timothyswt/nornicdb-arm64-metal:latest
-
Check resources:
docker system df
Solutions:
-
Fix volume permissions:
docker run --rm -v nornicdb-data:/data busybox chown -R 1000:1000 /data
-
Run as root (not recommended):
security_opt: - no-new-privileges:false
# System info
uname -a
docker version
go version
# NornicDB info
curl http://localhost:7474/status
# Logs
docker logs nornicdb > nornicdb.log 2>&1| Deployment | Location |
|---|---|
| Docker | docker logs nornicdb |
| Systemd | journalctl -u nornicdb |
| Binary | ./nornicdb.log |
- Monitoring - Health monitoring
- Deployment - Deployment guide
- Scaling - Performance tuning