Problem
AnythingLLM's backend crashed with Illegal instruction (core dumped) every time a document was embedded. The container restarted cleanly and served API calls fine — the crash only happened on the first vector write.
Investigation
The crash was reproducible on the ingest path but never at boot. The default vector database (LanceDB) ships a native Rust module that loads lazily on first write. The host is a Xeon E5-2697 v2 (Ivy Bridge, 2013) — it lacks AVX2, which modern Rust binaries are often compiled against. The first write executed an unsupported instruction and the process died with SIGILL.
Key evidence:
- Boot and API calls worked (the native module isn't loaded until first use).
docker logsshowed the crash only after the embedding call.- The same flow worked on a newer machine.
Fix
Switched the vector database from LanceDB to Qdrant, which is a separate HTTP service — no native module in the app container:
environment:
- VECTOR_DB=qdrant
- QDRANT_ENDPOINT=http://100.86.150.70:6333
Qdrant was already running in the lab stack, so this was a config change, not a new dependency.
Verification
- Ingest succeeded: documents appeared in the workspace and in the Qdrant collection.
- Retrieval returned correct answers with sources.
- No further crashes.
Lesson
When a containerized app crashes with Illegal instruction on older hardware, suspect native modules (Rust/C++ bindings) compiled for newer instruction sets. The fix is usually to swap the native dependency for a service over HTTP — which also keeps the app container smaller and the data plane separate.