Apache 與 mod_jk 和 glassfish 實例,為少量使用者建立了大量連線

Apache 與 mod_jk 和 glassfish 實例,為少量使用者建立了大量連線

我為門戶網站的生產伺服器進行了調整,我們有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)
  • 更少的海森蟲

缺點

  • 沒有找到一些

相關內容