首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 記憶體使用監控:memory_get_usage() 與 memory_get_peak_usage() 實戰範例

     編輯:PHP 相關知識

前言

PHP 腳本在處理大量資料(如匯入 CSV、圖片處理、大型陣列運算)時,記憶體耗盡是常見錯誤。PHP 提供 memory_get_usage() 與 memory_get_peak_usage() 兩個函數,可即時監控腳本記憶體消耗,協助優化與除錯。

核心函數說明

  • memory_get_usage(bool $real_usage = false):回傳當前腳本分配的記憶體位元組數。若 $real_usage=true 則回傳系統實際分配量(含內部緩衝)。
  • memory_get_peak_usage(bool $real_usage = false):回傳腳本啟動以來的記憶體峰值。

示範腳本

<?php
echo "初始: " . memory_get_usage() . " 位元組\n";

// 模擬佔用記憶體:建立 10 萬個 MD5 字串
for ($i = 0; $i < 100000; $i++) {
    $array[] = md5($i);
}

echo "建立陣列後: " . memory_get_usage() . " 位元組\n";
echo "峰值記憶體: " . memory_get_peak_usage() . " 位元組\n";

// 釋放記憶體
for ($i = 0; $i < 100000; $i++) {
    unset($array[$i]);
}
echo "釋放後: " . memory_get_usage() . " 位元組\n";

典型輸出範例

初始: 384,000 位元組
建立陣列後: 12,500,000 位元組
峰值記憶體: 14,200,000 位元組
釋放後: 390,000 位元組

實務應用場景

  1. 長時間運行腳本監控:在 CLI 守護程式中定期記錄記憶體,超過閾值時自動重啟或報警。
  2. 批次處理分塊:處理大量資料時,每處理 N 筆檢查記憶體,接近 memory_limit 時暫停釋放或分批寫入資料庫。
  3. 效能分析:比較不同演算法/資料結構的記憶體佔用,選擇最佳方案。
  4. 單元測試斷言:在測試中斷言記憶體增長在預期範圍內,防止記憶體洩漏。

進階技巧

  • 搭配 ini_get('memory_limit') 取得限制值,計算使用率百分比。
  • 使用 gc_collect_cycles() 強制垃圾回收,觀察循環引用釋放情況。
  • Xdebug + Webgrind 可視化記憶體分配時間線。

總結

善用 PHP 內建記憶體檢測函數,能在開發階段發現潛在記憶體問題,避免上線後出現 Allowed memory size exhausted 致命錯誤,是撰寫高品質 PHP 程式的基本功之一。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved