FOR PHP DEVELOPERS

Continuous profiling for PHP
exists. Read the requirements first.

If you came here expecting "nobody does continuous profiling for PHP", that is not true and we are not going to pretend it is. Two serious options exist. What they have in common is a requirement most PHP is not deployed under: a host you fully control.

Requirements below were read from the vendors' own documentation on 22 September 2026, with the source named in each case. If something has changed, tell us and we will correct it.

What is actually available

Datadog Continuous Profiler

Supports PHP properly: PHP 7.1+ on 64-bit Linux, glibc 2.17+ or Alpine 3.13+. It needs two things installed: the Datadog Agent (v6+, a daemon on the host) and the dd-trace-php extension, put in place by an installer script that edits your PHP INI. Not supported on serverless platforms. Read from Datadog’s PHP profiler page on 22 September 2026; that URL now redirects to the profiler setup index, where PHP is one of the listed languages.

If you run your own servers and already pay Datadog, this is the mature answer and we will not talk you out of it.

Grafana Pyroscope

Has SDKs for Go, Java, Python, .NET, Ruby, Node.js and Rust. PHP is reached only through eBPF auto-instrumentation with Grafana Alloy — there is no PHP SDK. eBPF means a privileged agent and a kernel you control, which rules out shared hosting and most managed platforms. You get CPU stacks; you do not get the SQL statement, the outbound HTTP call or the PHP error that belonged to one slow request.

Where that leaves most PHP

A large share of PHP runs where neither is installable: shared hosting, a client's cPanel or DirectAdmin account, a managed platform, a small VPS where a per-host APM price is out of proportion to the app. That is the gap PHPRay was built for — and it is worth saying plainly what we do and do not do.

We are not a continuous profiler. Here is what we are

Continuous profiling, in the Pyroscope sense, samples CPU stacks all the time and gives you flame graphs over a time range. We do not do that. What we do:

If what you need is a CPU flame graph of your whole fleet over the last week, take Pyroscope or Datadog. If what you need is "which request was slow last night and why", that is the thing we record and they sample.

What it costs to leave on

Any always-on tool is only interesting if the cost is small enough to ignore. Ours is measured on a real WordPress page rendering in about 48 ms, with the method published:

Measured
Recording every request40.7 ms against a 40.2 ms baselineinside the noise
Per-function attributionabout 4% on that page27% on a 48 ms micro-benchmark
Xdebug's profiler, same page1012 ms against 40 ms25× slower, 1.2 GB of dumps from sixty requests

The 4% row is the inconvenient one and we publish it anyway: per-function attribution is on or off per worker, so sampling does not make it cheaper. Raw numbers and method in what always-on tracing costs.

Side by side

Datadog / PyroscopePHPRay
What you installAgent daemon + PHP extension, or a privileged eBPF agent PHP extension + one binary as your own user; or a WordPress plugin with neither
Shared hostingNoYes — the extension from your own php.ini, or the plugin
What you getCPU stacks over time, flame graphs Every request with its SQL, HTTP calls, errors and N+1; function attribution on a sample
Where data livesVendor SaaSYour server; Cloud optional, stored in the EU
LicenceProprietaryApache-2.0 core, self-hostable
Entry pricePer host, per month$0 local and unlimited; Cloud from $0

Look at recorded data before installing anything

The MCP endpoint answers questions about a real WooCommerce fleet with no account and nothing installed. Or install locally in one line — Apache-2.0, no card.

Ask an agent about live data Install locally

Read next