Skip to content

ns8-piler: php-fpm pool too small drops requests under load #8282

Closed

Description

@stephdl

Steps to reproduce

  • Install piler on a NethServer 8 node.
  • Run a web vulnerability scan against the piler web interface.

Expected behavior

piler keeps answering and the scan finishes.

Actual behavior

piler stops answering halfway through the scan. nginx logs 68 requests that the client dropped after 10 seconds (status 499). The container image keeps Ubuntu's php-fpm default of 5 worker processes, and piler routes every unknown URL to index.php, so a burst of requests fills the pool and the extra requests wait until they time out.

Components

ns8-piler 1.3.2

See also

Fixed by NethServer/ns8-piler#146

Activity

  1. added this to the NethServer 8.11 milestone on Oct 29, 2026
  2. added theissue type on Oct 29, 2026
  3. self-assigned this
    on Oct 29, 2026
  4. moved this from ToDo to In Progress in NethServeron Oct 29, 2026
  5. stephdl commented on Oct 30, 2026

    @stephdl
    Author

    QA ns8-piler 1.3.3-dev.1

    Fix: the php-fpm pool is raised from 5 to 10 workers, so a burst of requests no longer drops piler (NethServer/ns8-piler#146).

    Setup

    Update an existing piler instance (here piler1) to the test image:

    api-cli run update-module --data '{"module_url":"ghcr.io/nethserver/piler:1.3.3-dev.1","instances":["piler1"],"force":true}'

    Test 1: the new pool settings are loaded

    runagent -m piler1 podman exec piler-app php-fpm8.5 -tt 2>&1 | grep -E 'max_children|request_terminate_timeout|request_slowlog_timeout'

    Expected:

    pm.max_children = 10
    request_slowlog_timeout = 10s
    request_terminate_timeout = 60s
    request_terminate_timeout_track_finished = no
    

    Test 2: 20 slow requests at once are all served

    This test fails on 1.3.2 (some requests are dropped) and passes on 1.3.3-dev.1.

    1. On the node, add a test page that takes 3 seconds:

      runagent -m piler1 podman exec -u 0 piler-app sh -c "printf '<?php sleep(3);' > /var/piler/www/qa-slow.php"
    2. From your PC, send 20 requests at once:

      seq 1 20 | xargs -P 20 -I{} curl -sk -o /dev/null -w '%{http_code}\n' --max-time 10 "https://<piler host>/qa-slow.php?{}" | sort | uniq -c

      Expected: 20 200. On 1.3.2 some lines show 000, those requests timed out.

    3. On the node, remove the test page:

      runagent -m piler1 podman exec -u 0 piler-app rm -f /var/piler/www/qa-slow.php

    Test 3: no regression

    • Log in as admin@local and as auditor@local.
    • Search for an archived email and open it.
  6. moved this from In Progress to Testing in NethServeron Oct 30, 2026
  7. added
    testingPackages are available from testing repositories
    on Oct 30, 2026
  8. lucagasparini commented on Oct 30, 2026

    @lucagasparini

    Test 1: VERIFIED
    Test 2: VERIFIED
    Test 3: VERIFIED

  9. removed
    testingPackages are available from testing repositories
    on Oct 30, 2026
  10. moved this from Testing to Verified in NethServeron Oct 30, 2026
  11. stephdl commented on Oct 30, 2026

    @stephdl
    Author
  12. moved this from Verified to Done in NethServeron Oct 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

verifiedAll test cases were verified successfully

Type

Projects

Relationships

None yet

Development

No branches or pull requests

Issue actions