Skip to content

[BUG] Orphaned PHP processes (zombies) created by internal crond #69

@bondskin

Description

@bondskin

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

While running the speedtest-tracker container, I observed a steady increase in zombie processes. Investigation shows that busybox crond (PID 403238 in my case) is spawning PHP processes that exit but are not reaped by the parent.

Process Tree Snippet:

UID PID PPID C STIME TTY TIME CMD
root 403238 402818 0 14:14 ? 00:00:00 busybox crond -f -S -l 5
[...] 410301 403238 Z [php]

Potential Trigger:
This behavior seems to correlate with high system load or network instability. It appears the PHP binary called by the scheduler doesn't exit cleanly or the crond fails to handle the SIGCHLD signal correctly.

docker inspect speedtest-tracker --format '{{.Config.Image}} {{.Image}}'
lscr.io/linuxserver/speedtest-tracker:latest sha256:e9a547fe4e1b8bbb0c888f4aa6ae5e0c7905a6aae6fe32a144ebe86b477ad7bd

Could this be also caused by the healthcheck?
Suspected Trigger:
Healthcheck
The container uses the following healthcheck: test: ["CMD-SHELL", "curl -fSs http://localhost:80/api/healthcheck | jq -r .message || exit 1"]

docker exec speedtest-tracker ps aux G cron
root 39 0.0 0.0 220 76 ? S 14:26 0:00 s6-supervise svc-cron
root 258 0.0 0.0 1628 984 ? Ss 14:26 0:00 busybox crond -f -S -l 5

Parent Process (PPID): busybox crond -f -S -l 5

Child Process (Zombie): [php]

docker exec -it speedtest-tracker php /app/www/artisan about --json
{"environment":{"application_name":"Speedtest Tracker","laravel_version":"12.41.1","php_version":"8.4.16","composer_version":"2.9.3","environment":"production","debug_mode":false,"url":"speed.skynet22.org","maintenance_mode":false,"timezone":"UTC","locale":"en"},"cache":{"config":true,"events":true,"routes":true,"views":true},"drivers":{"broadcasting":"null","cache":"database","database":"sqlite","logs":"stderr","mail":"smtp","queue":"database","session":"database"},"storage":{"/app/www/public/storage":false},"filament":{"version":"v4.1.0","packages":"filament, forms, notifications, support, tables, actions, infolists, schemas, widgets","views":"NOT PUBLISHED","blade_icons":"CACHED","panel_components":"CACHED"},"livewire":{"livewire":"v3.7.1"},"speedtest_tracker":{"version":"v1.13.5"}}

alexjustesen/speedtest-tracker#2645 (comment)

Expected Behavior

no zombie processes

Steps To Reproduce

I tried to explain it

Environment

- OS: Debian 13
- How docker service was installed: apt

CPU architecture

x86-64

Docker creation

---
services:
  speedtest-tracker:
    image: lscr.io/linuxserver/speedtest-tracker:latest
    container_name: speedtest-tracker
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
      - APP_KEY="base64:RHsgHHZs+1pviG7aXXX"
      - APP_URL="https://xxx"
      - DB_CONNECTION=sqlite
      - SPEEDTEST_SCHEDULE="3 5 * * *"
      - SPEEDTEST_SERVERS=31469
      - DB_HOST= #optional
      - DB_PORT= #optional
      - DB_DATABASE= #optional
      - DB_USERNAME= #optional
      - DB_PASSWORD= #optional
      - DISPLAY_TIMEZONE=Europe/Berlin #optional
      - PRUNE_RESULTS_OLDER_THAN=90 #optional
    volumes:
      - /home/mcp/docker/speedtest/data:/config
    tmpfs:
      - /run:exec,rw,size=64m  
      - /tmp:rw,size=128m
      - /config/www/storage/framework/cache:rw,size=64m
      - /config/www/storage/framework/sessions:rw,size=64m
    networks: 
      - net_dmz
    ports:
     - 8980:80
    mem_limit: 512m
    cpus: 0.3
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "curl -fSs http://localhost:80/api/healthcheck | jq -r .message || exit 1"]
      interval: 125s
      retries: 3
      start_period: 30s
      timeout: 10s

networks:
  net_dmz:
    external: true

Container logs

docker exec speedtest-tracker ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0    436   104 ?        Ss   14:26   0:00 /package/admin/s6/command/s6-svscan -d4 -- /run/service
root          17  0.0  0.0    220    80 ?        S    14:26   0:00 s6-supervise s6-linux-init-shutdownd
root          18  0.0  0.0    208    64 ?        Ss   14:26   0:00 /package/admin/s6-linux-init/command/s6-linux-init-shutdownd -d3 -c /run/s6/basedir -g 3000 -C -B
root          36  0.0  0.0    220    80 ?        S    14:26   0:00 s6-supervise svc-speedtest-tracker
root          37  0.0  0.0    220    76 ?        S    14:26   0:00 s6-supervise svc-php-fpm
root          38  0.0  0.0    220    76 ?        S    14:26   0:00 s6-supervise svc-nginx
root          39  0.0  0.0    220    76 ?        S    14:26   0:00 s6-supervise svc-cron
root          40  0.0  0.0    220    72 ?        S    14:26   0:00 s6-supervise s6rc-fdholder
root          41  0.0  0.0    220    80 ?        S    14:26   0:00 s6-supervise s6rc-oneshot-runner
root          49  0.0  0.0    208    68 ?        Ss   14:26   0:00 /package/admin/s6/command/s6-ipcserverd -1 -- /package/admin/s6/command/s6-ipcserver-access -v0 -E -l0 -i data/rules -- /package/admin/s6/command/s6-sudod -t 30000 -- /package/admin/s6-rc/command/s6-rc-oneshot-run -l ../.. --
abc          252  0.1  0.4 103244 66812 ?        Ss   14:26   0:00 php artisan queue:work --tries=3 --no-ansi -q
root         254  0.0  0.1  65204 27080 ?        Ss   14:26   0:00 php-fpm: master process (/etc/php84/php-fpm.conf)
root         256  0.0  0.0  61720  7644 ?        Ss   14:26   0:00 nginx: master process /usr/sbin/nginx -e stderr
root         258  0.0  0.0   1628   984 ?        Ss   14:26   0:00 busybox crond -f -S -l 5
abc          285  0.0  0.0  62184  3776 ?        S    14:26   0:00 nginx: worker process
abc          286  0.0  0.0  62184  3764 ?        S    14:26   0:00 nginx: worker process
abc          287  0.0  0.0  62184  3776 ?        S    14:26   0:00 nginx: worker process
abc          288  0.0  0.0  62184  3776 ?        S    14:26   0:00 nginx: worker process
abc          289  0.0  0.0  61964  3192 ?        S    14:26   0:00 nginx: cache manager process
abc          291  0.4  0.2  92640 45120 ?        S    14:26   0:01 php-fpm: pool www
abc          292  0.7  0.3  99088 51568 ?        S    14:26   0:03 php-fpm: pool www
root         337 40.0  0.0   2852  1904 ?        Rs   14:34   0:00 ps aux
❯ docker exec speedtest-tracker ps aux G cron
root          39  0.0  0.0    220    76 ?        S    14:26   0:00 s6-supervise svc-cron
root         258  0.0  0.0   1628   984 ?        Ss   14:26   0:00 busybox crond -f -S -l 5

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Issues

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions