제가 운영하는 사이트가 있습니다. 너무 궁금하고 알수있는 방법이 없어 이렇게 글남깁니다.
구조는 다음과 같습니다.
-
1.웹서버 프로그램 한개 실행
-
2.WAS 톰캣이 5개 실행, 세션 클러스트링 연결
-
3.MYSQL 프로그램 한개 실행
제가 궁금한 점은 다음과 같습니다.
-
1.웹서버 가동 프로세스는 현재 20개입니다. maxclient는 2048로 잡혀있습니다.
-
2.WAS는 5개 프로세스 개당 50개 스레드 총 300개정도가 있습니다. (톰캣 1개당 설정 AJP maxThread=500, connection pool=500 되어있습니다.)
-
3.MYSQL은 대략 50개정도 프로세스(PROCESSLIST테이블 조회)가 있습니다.
제가 생각하기에는 웹서버 프로세스가 20개있다면 WAS도 20개 MYSQL도 20개여야 한다고 생각했습니다.
정작 서버에는 20<->50<->50 입니다 왜 이런걸까요?
3개의 의견 from SLiPP
connection 과 thread 에 대해 오해하고 계시는 것 같습니다. thread pool, connection pool 은 별개로 보셔야 할 것 같습니다. 서로의 역할의 범주가 다릅니다. thread와 connection간에 is a, has a 관계를 고민해보시면 답이 나오실듯 합니다.
답변 감사합니다 아파치 커넥션 프로세스 1개가 was 스레드 여러개를 가지고있는건가요?
제가 정확히 이해하고 있는건지 모르겠으나 아파치 프로세스 안에 커넥션풀을 관리하는 쓰레드가 있고 그 커넥션풀안의 여러 커넥션들이 상황에 따라 n:n으로 was와 통신하는 것으로 알고 있습니다. 즉 커넥션이란건 특정 프로세스의 특정 쓰레드에 종속되고 점유되는 것은 아니고, 상황에 따라서 다른 프로세스, 다른 쓰레드 등으로 대상이 바뀔 수 있다고 이해하고 있습니다. 다만 커넥션을 새로 맺는 것은 꽤 큰 비용이 드니 세션 등을 이용한다던가 하여 커넥션을 유지하는 방법이 따로 있을 것 같네요.
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.