Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

Windows 2003 Apache 服務頻繁自動停止:Zend Optimizer 衝突排查實錄

編輯:關於伺服器

故障現象

  • 環境:Windows 2003 + Apache 2.4 + PHP + MySQL
  • Apache 運行一段時間後自動停止
  • 系統日誌:Apache2 服務因 1 (0x1) 服務性錯誤而停止
  • 錯誤日誌關鍵字:MaxConnectionsPerChild、Session Cache is not configured

排查歷程

階段 1:誤判方向 - MaxConnectionsPerChild

嘗試調整 httpd-mpm.conf:

ThreadsPerChild 250
MaxConnectionsPerChild 10000  → 改為 500

結果:無效,仍隨機停止。

階段 2:發現記憶體洩漏線索

  • 任務管理器顯示記憶體佔用 3GB+
  • 子進程未正常回收,記憶體持續增長
  • 推測:達到線程上限嘗試重啟子進程時失敗

階段 3:Windows 應用程式日誌關鍵突破

事件 ID 487:描述(在資源 Zend Optimizer+ 中)無法找到

階段 4:終極解決 - 停用 Zend Optimizer+

; php.ini 中註釋掉
;[zend]
;zend_extension="D:\php\ext\ZendOptimizer.dll"

重啟 Apache 後,服務穩定運行,問題徹底解決。

根因分析

  • Zend Optimizer+ (Opcache 前身) 在 Windows Apache 多線程模型下與特定 PHP 版本不相容
  • 導致子進程優雅重啟(Graceful Restart)失敗,進程殭屍化,記憶體洩漏
  • 最終觸發 MaxConnectionsPerChild 機制嘗試回收時徹底卡死

避坑建議

  1. Windows + Apache + PHP 生產環境慎用 Zend Optimizer+,改用 PHP 5.5+ 內建 Opcache
  2. Apache 2.4 Windows 版建議使用 ThreadStackSize 調大堆疊:
    ThreadStackSize 8388608 (8MB)
  3. 啟用 Apache 狀態模組監控:
    LoadModule status_module modules/mod_status.so
  4. 定期重啟 Apache 排程(配合 logrotate)作為備援

同場加映:SSL Session Cache 警告解決

# httpd.conf 添加
SSLSessionCache "shmcb:logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
Copyright © Windows教程網 All Rights Reserved