![Apache 與 mod_jk 和 glassfish 實例,為少量使用者建立了大量連線](https://rvso.com/image/617796/Apache%20%E8%88%87%20mod_jk%20%E5%92%8C%20glassfish%20%E5%AF%A6%E4%BE%8B%EF%BC%8C%E7%82%BA%E5%B0%91%E9%87%8F%E4%BD%BF%E7%94%A8%E8%80%85%E5%BB%BA%E7%AB%8B%E4%BA%86%E5%A4%A7%E9%87%8F%E9%80%A3%E7%B7%9A.png)
我為門戶網站的生產伺服器進行了調整,我們有4 台伺服器,2 台用於Web,2 台用於應用程序,並且Web 伺服器之前和之後都有防火牆(所以是的,應用程式和Web 伺服器之間存在防火牆)問題這裡從透過防火牆刪除應用程式伺服器和Web 伺服器之間的空閒連線開始,嘗試了許多解決方案,現在似乎問題從應用程式中的卡住斷開連線轉移,因為從防火牆中刪除,當我的負載較低時會發生此問題門戶,為了解決這個問題,我需要重新啟動所有應用程式伺服器,現在我遇到了高負載天的問題,緊急解決方案只是快速重新啟動Apache Web 伺服器,如何解決這個問題。
我透過 Jboss 負載平衡配置產生器的幫助進行了更改:http://lbconfig.appspot.com/?lb=mod_jk&mjv=1.2.28&nca=64&ncj=64&nai=2&nji=2&njips=6&f=true&c=false&lr=false&lrl=&mpm=Prefork
並使用 netstat 命令和 google Analytics 即時概述監控兩台伺服器中的連接,在上次重新啟動 3 天后,我得到了以下統計數據,約有 40 名訪客:
網頁端(2台伺服器,但「每個」連接她,而不是總數):
ESTABLISHED ~700 - 750
TIME_WAIT: 100-200 (big jumbs for one second 150 another 200 another 170 and then 120 and so)
應用端(這裡我統計了所有連接,其中大多數是 ESTABLISHED,少數是 CLOSE_WAIT 0 - 5 每次檢查):
S1 (4 instances running) : 900-950
S2 (5 instances running) : 1000-1100
伺服器詳細資訊:
- 在 Web 2x 伺服器上:Apache 2.2.14 / mod_jk 1.2.37
- 在應用程式 2x 伺服器上:帶有 ajp13 的叢集 Glassfish 2.1.1(6 個實例/每個伺服器)
- 所有伺服器均為 Solaris SPARC 64 V-CPU 32GB RAM。
我的配置: 大部分就像生成器給我的(你可以看到連結):
httpd.conf:
KeepAlive On
ServerLimit 12800
StartServers 5
MinSpareServers 5
MaxSpareServers 20
MaxClients 12800
MaxRequestsPerChild 5000
ExtendedStatus Off
工人屬性:
worker.maintain=30
worker.template.type=ajp13
worker.template.session_cookie=JSESSIONID
worker.template.lbfactor=1
worker.template.ping_timeout=10000
worker.template.connection_pool_timeout=10
worker.template.socket_keepalive=True
worker.template.socket_timeout=600
worker.template.connect_timeout=10000
worker.template.prepost_timeout=10000
worker.template.connection_ping_interval=20
worker.template.ping_mode=A
worker.template.socket_connect_timeout=600000
從玻璃魚一側從叢集配置端超時 10 秒,我有:
HTTP服務屬性:
- 連線逾時= 10000
請求處理:
- 線程數:2133
- 初始線程數:20
- 螺紋增量:10
保持活動(啟用):
- 線程數:400
- 最大連線數 256
- 超時:10秒
連接池:
- 最大待處理連線數 4096
所以:
- 那麼我的配置是否正確呢?
- 如何解決建立的連線數量過多或其安全問題? ,如果再次出現高負載,我不希望 apache 再次停機。
答案1
關於 mod_jk / mod_ajp:我們使用的是稍大的設置,並且時不時地發現錯誤和錯誤,連接斷開,但從未找到任何問題的真正解決方案(但我們發現了一些仍然存在的錯誤)
我的建議:進行替代設定和效能測試:mod_jk 與 proxy_http,如果 proxy_http 在可接受的範圍內,則跳過 mod_jk。我現在在兩種不同的設定中做到了這一點(此外,能夠用 nginx -> BIG WIN 替換 apache)並且不要後悔。
優點
- 更容易調試
- 更多種類的 lb/前端網關(haproxy、nginx、varnish)
- 更少的海森蟲
缺點
- 沒有找到一些