Read Sean

          Read me, read Sean.
          posts - 508, comments - 655, trackbacks - 9, articles - 4

          [Tips] Windows環境下Apache最基本的調優方法

          Posted on 2011-08-02 21:04 laogao 閱讀(4366) 評論(0)  編輯  收藏 所屬分類: On Java 、Operating Systems 、GNU/Linux

          今天遠程支持同事在Windows環境調優Apache服務器性能,記錄在此,供需要的朋友參考。

          Java EE應用,同時部署在兩個Tomcat(5.5.27)實例上,前面放了個Apache(httpd-2.2.19-win32-x86-no_ssl),通過mod_jk(1.2.32)做負載均衡,同一臺物理服務器,操作系統為64位的Windows Server 2003 SP2。現象是60+客戶端,平均每個客戶端每秒請求數2次,單個請求正常響應時間在500ms以內,即每秒沖進來120個請求,并發量最多在60上下,Apache就已不堪"重"負,靜態資源響應時間都超過10s,同時Tomcat和數據庫服務器均正常。憑我的經驗,同樣的壓力直接壓到Tomcat也不至于這么難看??磥韱栴}出在Apache。

          首先修改httpd.conf配置文件,打開status模塊:

          LoadModule status_module modules/mod_status.so
          <Location /status>
            SetHandler server-status
            Order deny,allow
            Deny from all
            Allow from 127.0.0.1 #需要的話也可放開為all
          </Location>

          這樣我們就能通過/status頁面查看服務器當前的狀態信息,結果觀察到worker(即線程)數僅為64!坑爹??!難怪撐不住。我記得以前Windows下面的Apache默認線程數沒這么小的。找準問題,接下來就好辦了:

          <IfModule mpm_winnt.c>
            ThreadsPerChild 300
            MaxRequestsPerChild 0
          </IfModule>

          稍微解釋一下:mpm_winnt.c是Apache為Windows NT提供的MPM (Multi-Processing Module),對應到Linux環境下,則有prefork.c(多進程/每進程1個線程)和worker.c(多進程+多線程)兩種MPM可選。Windows下面只會有父與子兩個進程,因此單個子進程能同時起多少線程(ThreadsPerChild)就成了調優的關鍵。另一個參數MaxRequestsPerChild的含義是單個子進程累計最多處理到少個請求,超過該值則退出重啟,這是出于防止內存泄露慢慢拖垮整個服務器而做的防御性措施,0表示不做此限制。

          新配置上線后,客戶端數量順利沖上200+。Case closed.

          主站蜘蛛池模板: 余姚市| 方正县| 曲沃县| 河北区| 凤城市| 家居| 宜黄县| 玛沁县| 鄱阳县| 桃源县| 吐鲁番市| 海安县| 龙南县| 闸北区| 孟津县| 渝北区| 遵义县| 尼木县| 枝江市| 梁山县| 信阳市| 吉安市| 图片| 久治县| 开封市| 龙泉市| 霸州市| 桐梓县| 兴和县| 张北县| 达孜县| 抚顺县| 大埔县| 绥中县| 英德市| 历史| 新巴尔虎右旗| 简阳市| 合水县| 怀来县| 湟源县|