Skip to content

Worker SIGSEGV since v0.8.7-v8 #2

@netsgnut

Description

@netsgnut

Hi, great project you have here! Not sure where to report this issue, so I am reporting it to where I see the SIGSEGV.

I am setting up OpenWorkers in a homelab and using it to run smaller tasks that I have lying around. My environment is set up using Podman Compose from openworkers-infra, with paths modified to point to the local domain names.

What I see is that since v0.8.7-v8, nginx will return 502 errors after doing exactly 3 requests, since the runners will just exit with error 139.

openworkers-proxy logs:

2026-01-24T22:21:01.079Z a575d6b28de112d6fb1d08dcbf261970 worker-engine-proxy [abc-worker.lab.example.com] abc 10.89.13.12  	 GET "/some-path" 200 0.066
2026-01-24T22:21:02.235Z a4819cf6151d17bcc1c3a089ba683e15 worker-engine-proxy [abc-worker.lab.example.com] abc 10.89.13.12  	 GET "/some-path" 200 0.063
2026-01-24T22:21:02.865Z b596fb35bb2dcfdd1f2080fc43dad968 worker-engine-proxy [abc-worker.lab.example.com] abc 10.89.13.12  	 GET "/some-path" 200 0.087
2026/01/24 22:21:03 [error] 2#2: *10 upstream prematurely closed connection while reading response header from upstream, client: 10.89.13.12, server: ~\.lab\.example\.com$, request: "GET /some-path HTTP/1.1", upstream: "http://10.89.13.7:8080/some-path", host: "abc-worker.lab.example.com"
2026/01/24 22:21:03 [warn] 2#2: *10 upstream server temporarily disabled while reading response header from upstream, client: 10.89.13.12, server: ~\.lab\.example\.com$, request: "GET /some-path HTTP/1.1", upstream: "http://10.89.13.7:8080/some-path", host: "abc-worker.lab.example.com"

(Notice that the worker URL scheme is different because I have changed them in the nginx config, but it should be irrelevant to the issue.)

A runner's log looks like this from its start to its exit:

[2026-01-24T22:38:43Z DEBUG openworkers_runner] start main (hyper)
[2026-01-24T22:38:43Z DEBUG openworkers_runner] Isolate pool config: max_size=1000, heap_initial=10MB, heap_max=50MB
[2026-01-24T22:38:43Z DEBUG openworkers_runner] connected to Postgres
[2026-01-24T22:38:43Z DEBUG openworkers_runner::nats] connecting to nats: nats://nats:4222
[2026-01-24T22:38:43Z DEBUG openworkers_runner] connected to NATS
[2026-01-24T22:38:43Z DEBUG openworkers_runner] started log publisher
[2026-01-24T22:38:43Z INFO  openworkers_runtime_v8::thread_pinned_pool] Thread-pinned pool initialized: max_per_thread=1000, max_per_owner=None, queue_size=10, queue_timeout_ms=5000
[2026-01-24T22:38:43Z DEBUG openworkers_runner] Initialized thread-pinned isolate pool with 1000 isolates per thread
Listening on http://0.0.0.0:8080 with 4 listeners
[2026-01-24T22:38:43Z DEBUG openworkers_runner::nats] connecting to nats: nats://nats:4222
[2026-01-24T22:38:43Z DEBUG openworkers_runner] Listener 0 started
[2026-01-24T22:38:43Z DEBUG openworkers_runner] Listener 1 started
[2026-01-24T22:38:43Z DEBUG openworkers_runner] Listener 3 started
[2026-01-24T22:38:43Z DEBUG openworkers_runner] Listener 2 started
[2026-01-24T22:38:43Z DEBUG openworkers_runner::event_scheduled] subscribing to scheduled JoinHandle { id: Id(17) }
[2026-01-24T22:38:43Z DEBUG openworkers_runner::nats] connecting to nats: nats://nats:4222
[2026-01-24T22:38:43Z INFO  openworkers_runner::log] Global log publisher started (batching: 10msg/100ms)
[2026-01-24T22:38:43Z DEBUG openworkers_runner::event_scheduled] listening for scheduled tasks
[2026-01-24T22:39:23Z DEBUG openworkers_runner] handle_request: GET /some-path in thread ThreadId(4)
[2026-01-24T22:39:24Z DEBUG openworkers_runner] host: Some("abc-worker.lab.example.com"), worker_id: None, worker_name: Some("abc")
[2026-01-24T22:39:24Z DEBUG openworkers_runner] request_id: b82ada08e80651965f7a60bb4236787f, worker_id: None, worker_name: Some("abc")
[2026-01-24T22:39:24Z DEBUG openworkers_runner::store] get_worker_with_bindings: Name("abc")
[2026-01-24T22:39:24Z DEBUG openworkers_runner::store] worker found: id: 21d5d010, version: 76, bindings: 0, type: typescript
[2026-01-24T22:39:24Z DEBUG openworkers_runner] worker found: true
[2026-01-24T22:39:24Z INFO  openworkers_runner::worker_pool] Initializing worker semaphore with 160 max queued workers
[2026-01-24T22:39:24Z DEBUG openworkers_runner::worker] transpile cache MISS: worker=21d5d010, version=76
[2026-01-24T22:39:24Z DEBUG openworkers_runner::worker] transpile cache HIT: worker=21d5d010, version=76
[2026-01-24T22:39:24Z INFO  openworkers_runner::worker_pool] Sequential worker pool initialized with 16 threads
[2026-01-24T22:39:24Z DEBUG openworkers_runtime_v8::thread_pinned_pool] Thread-local pool initialized on thread ThreadId(13) (max_per_owner=None, queue_size=10)
[2026-01-24T22:39:24Z DEBUG openworkers_runtime_v8::thread_pinned_pool] Cache MISS: creating new isolate for owner c88f9ecf-cc16-4b34-9006-f3b15346d2f8 (pool: 1/1000, owner: 1/None)
[2026-01-24T22:39:24Z DEBUG openworkers_runtime_v8::thread_pinned_pool] Creating new TaggedIsolate for owner: c88f9ecf-cc16-4b34-9006-f3b15346d2f8
[2026-01-24T22:39:24Z INFO  openworkers_runtime_v8::thread_pinned_pool] TaggedIsolate created for owner c88f9ecf-cc16-4b34-9006-f3b15346d2f8 in 52.192604ms (snapshot: false)
[2026-01-24T22:39:24Z DEBUG openworkers_runner] handle_request done in 57ms
[2026-01-24T22:39:24Z DEBUG openworkers_runner::log] Flushing logs for worker: 21d5d010
[2026-01-24T22:39:34Z DEBUG openworkers_runner] handle_request: GET /some-path in thread ThreadId(4)
[2026-01-24T22:39:34Z DEBUG openworkers_runner] host: Some("abc-worker.lab.example.com"), worker_id: None, worker_name: Some("abc")
[2026-01-24T22:39:34Z DEBUG openworkers_runner] request_id: 09720dc84bdab9d2c928c72a45e6d65b, worker_id: None, worker_name: Some("abc")
[2026-01-24T22:39:34Z DEBUG openworkers_runner::store] get_worker_with_bindings: Name("abc")
[2026-01-24T22:39:34Z DEBUG openworkers_runner::store] worker found: id: 21d5d010, version: 76, bindings: 0, type: typescript
[2026-01-24T22:39:34Z DEBUG openworkers_runner] worker found: true
[2026-01-24T22:39:34Z DEBUG openworkers_runner::worker] transpile cache HIT: worker=21d5d010, version=76
[2026-01-24T22:39:34Z DEBUG openworkers_runner::worker] transpile cache HIT: worker=21d5d010, version=76
[2026-01-24T22:39:34Z DEBUG openworkers_runtime_v8::thread_pinned_pool] Thread-local pool initialized on thread ThreadId(14) (max_per_owner=None, queue_size=10)
[2026-01-24T22:39:34Z DEBUG openworkers_runtime_v8::thread_pinned_pool] Cache MISS: creating new isolate for owner c88f9ecf-cc16-4b34-9006-f3b15346d2f8 (pool: 1/1000, owner: 1/None)
[2026-01-24T22:39:34Z DEBUG openworkers_runtime_v8::thread_pinned_pool] Creating new TaggedIsolate for owner: c88f9ecf-cc16-4b34-9006-f3b15346d2f8

I bisected versions, and I find that the last good version that works for me is openworkers-runner:v0.8.5-v8, v0.8.7-v8 and beyond exhibit the behaviour outlined above. Other package versions don't seem to matter in this case, and the schema has been updated to the latest.

Any pointers?

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