Repository navigation
Mullion 2.5.0
A Performance tab on every project: per-route timings with budgets and baselines, a PHP profiler with flame graphs (macOS), production-readiness checks, a built-in load test, production-like mode and worker health.
Upgrade: Settings → About & updates → Upgrade · brew upgrade mullion · scoop update mullion
Added
-
PHP profiler: flame graphs for a site's requests (macOS). The
project page's Performance → Profiler tab (andmullion profile <site> on|off|status|list|show|clear) records where PHP requests spend their
time with SPX 0.4.22
(GPLv3 — built on your Mac from source, never shipped by Mullion; about
a minute the first time per PHP version, with the Xcode Command Line
Tools). spx.so is loaded disabled, which costs nothing; turning a site
on passes its SPX settings through Caddy for that site only (other
sites on the same php-fpm are explicitly kept off). Profile only when
asked (SPX's control panel for your browser session, or
?SPX_ENABLED=1&SPX_KEY=…on any URL), the next N requests, requests
matching a path (/api,/orders/*), or every request. Each profile
shows its request, wall time, memory and call count, a zoomable,
searchable flame graph and the top functions by self and inclusive
time, with a link to SPX's own viewer; the newest 100 profiles (at most
256 MB) per site are kept.mullion php updaterebuilds SPX for the new
patch when the old one had it. Not available on Windows yet: SPX has no
Windows build. -
Performance tab on the project page (and
mullion perf <site> routes|check|load|prod|workers). Routes: per-route count,
average, p50/p95/p99, queries, query time, peak memory, error rate and
N+1 from the Watch data (Laravel's route names with Deep on), with
per-site budgets, saved baselines and a regressions-first comparison.
Readiness: a production-readiness audit — debug/env/log settings,
config and route cache readiness, dev packages inrequire, Composer
autoloader, strict models, OPcache, PHP end of life, database indexes
and primary keys (read-only, through the.envconnection), the N+1
and slow queries Watch saw, and the frontend build — each finding with
the why, the exact fix, Run fix/Simulate and Ignore. Load test: a
built-in load tester against the site's own hosts with live RPS,
percentiles, status codes and a latency histogram, results kept and
compared with the previous run. Production-like mode: APP_ENV and
APP_DEBUG passed by Caddy (the .env stays as it is), OPcache
timestamps frozen for the site, optionalartisan optimize, long
cache headers for fingerprinted assets; frontend sites serve their
build. Workers: memory/CPU of each worker sampled every 10 s, leak
detection, restarts, and per-job timings and repeated failures from
queue workers' logs. -
Watch: the request event now carries its query count and total query
time (kept even past the 3,000-events-per-request cap).
Fixed
- Explain: SQL Server on Windows failed with "An unsupported attribute
was designated on the PDO object" (pdo_sqlsrv rejects
PDO::ATTR_TIMEOUT).