設定記憶體GC提高IIS PHP執行穩定性

2021-06-27 10:58:28 字數 1143 閱讀 7381

iis配置php提供web服務. 短期訪問正常,長時間高壓力訪問容易崩潰.表現為iis提示500錯誤,php-cgi.exe崩潰. 此時在php日誌中看不到任何異常,但windows事件日誌記錄下了php-cgi.exe應用程式錯誤. 其原因和php記憶體管理有關.有以下改善方法1. 伺服器配置足夠物理記憶體.根據任務管理器介面的物理記憶體資料,保留更多的空閒物理記憶體給php-cgi.exe使用. 避免總記憶體占用超過物理記憶體.2. 給php-cgi.exe配置足夠記憶體.php記憶體**機制決定了達到一半的記憶體占用時就會執行gc. 頻繁的gc造成php崩潰(windows版php的bug)

;根據實際情況可以改大些. 最好超過實際占用值的兩倍以上(任務管理器可以檢視php-cgi程序得知實際占用值)

memory_limit = 128m

程式中如下**,效果和更改php.ini相同.
ini_set('memory_limit','128m');
3. fastcgi配置請求超過一定數量(例如1000) 就重啟程序.
maxinstances=64   #根據記憶體和cpu情況配置最大php-cgi.exe程序數. 不要伺服器壓力過大.

instancemaxrequests=1000 #每處理1000個請求則重啟例項.

environmentvars=php_fcgi_max_requests:1000 #同上

如果64/1000還不行,可以配置更少4.減少請求處理記憶體占用和處理時長.優化php**,提高程式效能和減少記憶體占用。比如使用php完成採集任務時避免一次採集過多內容(那樣會占用大量的記憶體和單次cpu處理時間).5. 可以考慮在php處理過程中關閉gc.雖然關閉gc會造成php記憶體占用增大,但可以避免頻繁執行gc造成php-cgi.exe崩潰.
gc_collect_cycles();

gc_disable();

....php業務**.

gc_enable();

以上方法可以極大的改善windows版php的執行穩定性. 總結就是以下幾點:1. 不要讓php伺服器滿負荷執行.2. 盡可能減少php引擎的記憶體**次數(通過優化**降低記憶體占用或關閉gc實現)

jvm記憶體組成 GC

1.jvm記憶體組成 堆 除基本型別之外所有new的物件儲存在堆。棧 儲存一些區域性變數 臨時儲存 本地方法棧 只要支援其他語言的方法,儲存native方法的狀態 方法區 存放類資訊,靜態資訊,final常量資訊,屬性,方法等。主要存放於持久代。程式計數器 pc 2.堆是由新生代和舊生代組成,new...

JVM記憶體結構與GC

前段時間沒有好好準備,錯過了 金三銀四 因此最近開始惡補各方面知識,決定先從jvm記憶體結構和gc開始。jvm記憶體結構分為如下幾部分 前兩項為執行緒共享,後三項為執行緒私有的 1 方法區 儲存已經被虛擬機器載入的類資訊 常量 jit 及時編譯器just in time 編譯後的 以及類變數 sta...

基礎 Java記憶體和GC彙總

主要來自jvm 8 定義。執行時資料區生命週期一部分與jvm繫結,一部分與執行緒繫結 pc暫存器 與執行緒繫結。指向當前方法位址 非native 或未定義 native jvm棧 與執行緒繫結 堆 與jvm繫結。用來放new出來的例項 函式區與jvm繫結。用來儲存編譯後的中間 執行時常量池 與類繫結...