同一頁面、同一資料,memory_get_usage() 回傳值時而 700KB、時而 1.5MB、時而 5MB,重啟 Apache 後恢復正常。
memory_get_usage(true) 回傳向 OS 申請總量,false(預設)回傳實際使用量。兩者差異大時表示內部碎片多。memory_get_usage,但進程總 RSS 會增加。| 工具 | 用途 |
|---|---|
memory_get_usage(true) | 即時觀察向 OS 申請量 |
memory_get_peak_usage() | 請求峰值記憶體 |
| Xdebug + Webgrind | 函式級記憶體分析 |
| Blackfire.io | 生產級效能剖析、記憶體時間軸 |
| pmap / ps aux | OS 層面進程 RSS、共享/私有記憶體 |
gc_enable(); gc_collect_cycles(); 在關鍵點強制回收。unset() 或改用快取服務。pm.max_requests = 500 定期重啟 Worker 釋放記憶體。memory_get_usage() 波動屬正常現象,關鍵在於「趨勢」而非單點數值。持續成長趨勢暗示洩漏,請善用 memory_get_peak_usage、Xdebug、Blackfire 定位,並透過 PHP-FPM 進程回收、GC 調優、升級 PHP 版本根治。