定制 webparking/laravel-queue-garbage-collection 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

webparking/laravel-queue-garbage-collection

Composer 安装命令:

composer require webparking/laravel-queue-garbage-collection

包简介

Collect PHP reference cycles after every queue job to keep long-running workers from leaking off-heap memory.

README 文档

README

Latest Version on Packagist Total Downloads run-tests

A zero-config Laravel package that runs gc_collect_cycles() after every queue job.

Why this exists

Long-running queue workers accumulate PHP reference cycles that pin off-heap memory: the native buffers behind libcurl and OpenSSL (any HTTP client or SDK), DOM trees, image resources, and similar extension-backed objects. That memory is invisible to memory_get_usage(), so queue:work --memory never trips on it. Meanwhile PHP's adaptive cyclic garbage collector backs off precisely in this situation — the cycles hold only a handful of PHP objects while pinning a lot of native memory, so the collector's object-count heuristic sees nothing worth collecting. The result: resident memory (RSS) climbs job after job until the worker is OOM-killed.

Forcing a collection at each job boundary releases those cycles immediately and keeps memory flat. It is safe to force per job because queue workers share no state between jobs, so nothing you'd want to keep is ever collected.

Installation

composer require webparking/laravel-queue-garbage-collection

That's it. The service provider auto-registers via Laravel's package discovery and hooks a listener onto both JobProcessed (success) and JobExceptionOccurred (each failed attempt). The listener calls gc_collect_cycles() and nothing else.

When you might not want it

The only profile where this is pure overhead is a very high-throughput queue of tiny, cycle-free jobs under no memory pressure — there, each collection scans the GC root buffer and frees nothing. Everywhere else the cost is negligible, and it is never a correctness risk (workers share no state across jobs, so a forced collection can only reclaim genuine garbage).

Supported versions

Every combination below is exercised in CI:

PHP Laravel Testbench
8.1 9 7
8.2 10 8
8.3 11 9
8.4 12 10
8.5 13 11

Testing & local development

The full PHP × Laravel matrix runs locally via act, executing the exact CI workflow in Docker:

make test               # run the whole matrix (needs `act` + Docker)
make test-job php=8.3   # run a single PHP version from the matrix

For day-to-day work there's a Docker workspace pinned to the newest supported combination (PHP 8.5 / Laravel 13):

make start     # start the workspace and install dependencies
make phpunit   # run the test suite once
make phpstan   # run static analysis
make cs-fix    # apply code style
make help      # list all targets

Prefer running things yourself? composer install && composer test works too.

License

The MIT License (MIT). Please see the License File for more information.

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 2
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-07-06

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固