# PHP-Furnace Proof of concept in alpha stage. A near zero-dependency, PHP-FPM process profiler and live streaming dashboard. Designed for PHP 8.1+ using only standard libraries. It uses `/proc`, `gdb`, and Server-Sent Events to continuously trace live PHP-FPM processes but requires PHP to have pcntl extension to be enabled. --- ## 🚀 Features * Monitors all running PHP-FPM worker processes * Tracks: * Memory usage * CPU time and deltas * Number of open file descriptors * Number of threads * Last handled request URI (via `$_SERVER['REQUEST_URI']`) * Backtraces using GDB * Streams data live to the browser via SSE * Comes with a minimal HTML viewer * Logs data in newline-delimited JSON for later use --- ## 📦 Requirements * PHP 8.1 or later * Linux-based system (uses `/proc` and GDB) * `gdb` installed and executable by the current user * `pcntl` extension enabled ```bash sudo apt install gdb ``` --- ## 🛠️ Setup 1. Ensure `gdb` and `pcntl` are available 2. Run the script: ```bash php furnace.php ``` 3. Open the live dashboard: ``` http://localhost:8123/ ``` --- ## 📁 Output Location Log data is appended to: ``` /tmp/php-furnace/furnace-stream.log ``` Each event is streamed to the browser and formatted in JSON: ```json { "time": 1720043265, "delta": 5, "pid": 3410, "calls": 3, "cpu_time_ticks": 20199, "cpu_delta": 15, "memory_kb": 10240, "threads": 1, "fds": 23, "request_uri": "/index.php", "stack": ["#0 ...", "#1 ..."] } ``` --- ## 🧯 Troubleshooting * **No data in the browser**: * Check `/tmp/php-furnace/furnace-stream.log` for entries * Confirm PHP-FPM workers exist via `ps aux | grep php-fpm` * Ensure `gdb` is installed and accessible without blocking * **GDB timeout**: * Process may be idle or protected — increase timeout or skip slow PIDs