Skip to content

Server wedge: generation stalls mid-decode; /health OK but /slots hangs; needs SIGKILL #27388

Description

@victorarthur

Server wedge: generation stalls mid-decode; /health OK but /slots hangs; process must be SIGKILLed

Summary

Under long-running load the server occasionally stops generating mid-decode:
print_timing lines cease, GPU utilization drops to 0%, the process stays alive,
/health still returns {"status":"ok"}, but /slots hangs (no response)
and the client stream goes idle until the client-side timeout. In one instance
the process also ignored SIGTERM and required kill -9.

Observed 3 times in 2 days across two builds and two different models, with
and without MTP
, so it does not appear specific to a model, speculative
decoding, or a recent regression.

Environment

  • llama.cpp CUDA backend; observed on build 452 (9558fa4) and build 561 (ee4c505)
  • 2× RTX 3090 (PCIe/PHB, no NVLink), driver 570.133.07, CUDA 12.8, Linux
  • No Xid errors in dmesg in any incident (not a GPU fault)

Incidents

A) Qwen3.6-35B-A3B Q8_0 (MoE, no MTP), single slot, 32K ctx, long-context
eval task: generation stopped after ~286 tokens (timing lines ceased), client
timed out after 20 min, server log showed cancel task then the process kept
spinning (R state), ignored SIGTERM, needed SIGKILL. Immediately before the
stall: slot get_availabl: … selected slot by LCP similarity, f_sim_best = 0.999.

B) Qwen3.8-27B Q6_K (embedded MTP, --spec-type draft-mtp --spec-draft-n-max 3),
--parallel 2, two concurrent agent workloads: slot 1 decoding normally
(~40 tok/s, n_decoded = 8337), then all timing output stops; /health OK,
/slots hangs, GPU 0%. Restart required. Full journal excerpt (926 lines around
the stall) available on request.

C) Same symptom pattern on build 561 during a client 300 s stream-idle
timeout; restart healed it.

Server invocation (incident B)

llama-server -m Qwen3.8-27B-Q6_K.gguf -mm mmproj-F16.gguf \
  --spec-type draft-mtp --spec-draft-n-max 3 \
  --jinja -ngl 999 --ctx-size 458752 --parallel 2 \
  -ctk q8_0 -ctv q8_0 --cache-reuse 0 --no-context-shift \
  --temp 1.0 --top-p 0.95 --top-k 20 --min-p 0.0

(--cache-reuse 0 --no-context-shift were added after incident A as a hunch;
incident B shows they do not prevent it.)

Notes

  • /health responding while /slots hangs suggests the slots endpoint blocks on
    a mutex held by the stuck decode path — a liveness probe on /slots (or a
    watchdog around the decode loop) would at least make the state detectable.
  • Happy to reproduce with added instrumentation and to share full journals.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions