glassfish 인스턴스가 있는 mod_jk가 있는 Apache, 적은 수의 사용자를 위해 다수의 연결 설정됨

glassfish 인스턴스가 있는 mod_jk가 있는 Apache, 적은 수의 사용자를 위해 다수의 연결 설정됨

포털용 프로덕션 서버를 조정하고 있는데 웹용 2개, 앱용 2개 등 4개의 서버가 있고 웹 서버 전후에 방화벽이 있습니다(그래서 앱과 웹 서버 사이에 방화벽이 있습니다). 문제 여기에서는 방화벽으로 앱 서버와 웹 서버 간의 유휴 연결을 끊는 것부터 시작하여 많은 솔루션을 시도했지만 이제 방화벽에서 떨어지기 때문에 앱에 있던 끊긴 연결이 끊어진 문제가 이동한 것 같습니다. 이 문제는 부하가 낮을 때 발생했습니다. 이 문제를 해결하려면 모든 앱 서버를 다시 시작해야 합니다. 이제는 로드가 많은 날 문제가 발생했으며 긴급 해결책은 간단히 Apache 웹 서버를 빠르게 다시 시작하여 이 문제를 해결하는 것이었습니다.

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

서버 세부정보:

  • 웹 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개

그래서:

  • 내 구성이 올바른가요?
  • 설정된 연결 수가 많거나 안전하다고 해결하는 방법은 무엇입니까? 부하가 다시 높아지면 아파치의 가동 중지 시간이 다시 발생하는 것을 원하지 않습니다.

답변1

mod_jk/mod_ajp 관련: 우리는 이것을 약간 더 큰 설정으로 사용했고 가끔씩 버그와 오류를 발견하고 연결이 끊어졌지만 어떤 문제에 대한 실제 해결책을 찾지 못했습니다(그러나 여전히 존재하는 몇 가지 버그를 발견했습니다).

내 조언: 대체 설정을 만들고 성능 테스트를 수행하십시오: mod_jk 대 Proxy_http 그리고 Proxy_http가 허용 가능한 범위 내에 있으면 mod_jk를 건너뛰십시오. 나는 지금 2가지 다른 설정으로 이 작업을 수행했으며(또한 Apache를 nginx -> BIG WIN으로 대체할 수 있음) 후회하지 않습니다.

찬성

  • 디버그하기가 더 쉽다
  • 더욱 다양한 lb/프론트엔드 게이트웨이(haproxy, nginx, varnish)
  • 하이젠버그가 적다

단점

  • 좀 못 찾았어

관련 정보