JIT bug: composer install sometimes hangs
Personne n'a encore pris cette issue.
- Langage dominant
- C
- Étoiles
- 40.4k
- Forks
- 8.1k
- Merge moyen
- 2 j 13 h
- PR mergées (30 j)
- 96
Description
Description
composer install sometimes hangs when JIT is on and set to tracing. I created a reproducing repo that shows the problem: https://github.com/ondrejmirtes/composer-hang-repro
Disclaimer: Claude Code helped me create the reproducer. The repo contains two Dockerfiles (with JIT on/off) that shows the difference in behaviour and loop.sh script that runs composer install over and over and shows that it hangs in about 3 % of performed runs.
There are some details in the README but consider them with a grain of salt.
To reproduce the problem in the cloned link repository:
# Build both images (PHP 8.5.6 + Composer 2.9.5)
docker build -t composer-jit-hang -f Dockerfile.jit .
docker build -t composer-jit-nojit -f Dockerfile.nojit .
# 1) See the hang with opcache.jit=tracing.
# loop.sh bootstraps vendor/ on first run (one ~30 s install to bring in
# Symfony Flex, which has to be loaded as a plugin for the JIT bug to
# fire), then runs `composer install --dry-run` 200 times. Expect a
# handful of those runs to be killed at the 15 s deadline — last
# measurement: 19 hangs in 500 runs.
docker run --rm \
-v "$PWD":/work \
composer-jit-hang bash /loop.sh 200
# 2) Same project, same Composer, same PHP, JIT off — zero hangs.
docker run --rm \
-v "$PWD":/work \
composer-jit-nojit bash /loop.sh 200
PHP Version
PHP 8.5.6 (cli) (built: May 8 2026 19:23:57) (NTS)
Copyright (c) The PHP Group
Built by https://github.com/docker-library/php
Operating System
Debian 13.4
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Clonez le dépôt lié composer-hang-repro et commencez par construire Dockerfile.jit et Dockerfile.nojit, puis exécutez loop.sh pour comparer des installations répétées de Composer. Lisez le README et examinez le comportement de PHP JIT/OPcache impliqué dans la configuration du tracing. C’est terminé lorsque les blocages démontrés sont compris et ne se produisent plus avec le reproducer lorsque le tracing est activé.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- docker, php
- Domaine
- compilers, performance
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 45/100