Archive
performance
-
FrankenPHP worker mode, with numbers from a real application
Six weeks replacing PHP-FPM with FrankenPHP worker mode on a Symfony 6.4 back office. The config keys that mattered, the memory leak we caused ourselves, and the p95 and throughput numbers on both sides.
-
Cache stampedes, and the Lock component doing the boring part
A Redis failover cost us four minutes of 9 second p99 because the lock I hand rolled in 2019 had two bugs. Replacing it with the Cache Contracts and the Lock component deleted 210 lines.
-
PHP 8, three months in: the JIT was the least of it
We moved twelve app servers from PHP 7.4 to 8.0 in January. The JIT did nothing measurable and is switched off. The comparison semantics and internal TypeErrors are what actually cost us a night.
-
Redis in front of a report that was still slow
Caching a nine second aggregate report cut the median to 81 milliseconds and pushed the p99 to nearly fifteen seconds, because every expiry started a stampede. What the lock, the stale copy and the cache keys look like now.
-
Ten weeks of PHP 7 in production
We moved the platform from PHP 5.6 to 7.0.2 in January and are now on 7.0.3. What broke mechanically, what needed thought, the numbers off our own six boxes, and why strict_types only goes in new files.
-
EXPLAIN, and the report that took forty seconds
A finance report on the ERP took 41 seconds against 1.9 million invoices. The slow query log, EXPLAIN, one index that was never used, and the composite index that finally worked on MySQL 5.5.