가넷sw
200
2021-04-27 15:24:54 작성 2021-04-27 15:32:37 수정됨
10
176

Tomcat + spring 웹프로그램 부하 관련


안녕하세요.

일전에 tomcat, spring 부하 관련해서 문의 드렸습니다. 다시한번 문의 드립니다.


환경

- Server : Tomcat 8.5

- JDK : 1.8.21


Tomcat 서버에 Spring Framework 기반의 웹프로그램을 붙여 운영중에 있습니다.

그런데 최근 웹페이지 속도이슈가 있어 부하 가능성을 두고 nGrinder로 부하를 주었습니다.


아래 그림과 같이 30명 동시 사용으로 부하를 주고 그 동안에 제가 만든 웹페이지를 실행하였습니다.

(테스트 URL은 제 웹페이지의 로그인 페이지입니다.)


nGringer 설정 후 저의 웹페이지 실행 결과 로딩만 진행되고 화면이 오픈되지 않았습니다.

nGrinder를 1분간 실행한 이후에도 여전히 오픈되지 않았습니다.(1~3분이 지나도 웹페이지가 열리지 않습니다.)



로그인 페이지에는 jsp 오픈 외에는 아무 트렌젝션도 없습니다.


부하를 주기 전에는 정상적으로 웹페이지가 오픈된 것으로 보아 저의 웹프로그램의 문제가 있는것으로 생각되는데 어느부분을 확인하여야 하는지 자문을 구하고 싶습니다.

30명 동시유저인데 안되는 것을 보면 웹프로그램의 문제가 있는것 같은데 어느쪽을 접근해야 할지 알 수가 없어 이렇게 문의드립니다.(해당내용으로 일주일째 답을 찾지 못하고 있어 꼭 도움을 받아보고 싶습니다.)



긴 글 읽어주셔서 감사합니다.

0
  • 답변 10

  • BalanceE
    498
    2021-04-27 15:36:52

    30명 동시사용에 대한 TPS가 최고치가 2000이네요 

    DB에 대한 부하가 엄청나게 심할듯 보입니다.

    어떤 페이지를 만들었는지는 모르겠지만 cache를 혹시 적용하신것인가요?

  • 가넷sw
    200
    2021-04-27 15:41:58 작성 2021-04-27 15:42:49 수정됨

    @BanlnceE


    로그인 후에는 DB 접속을 진행하긴 하는데

    테스트한 페이지는 로그인 페이지여서 DB 트렌젝션을 진행하지 않습니다.


    그래서 더욱 원인을 알수 없어 이렇게 문의를 드립니다. 잠시 Login쪽 소스를 보여드린다면 아래와 같습니다.


  • 가넷sw
    200
    2021-04-27 15:42:58


  • BalanceE
    498
    2021-04-27 16:02:18

    보여주신 코드로만 대략적으로 보았을 경우,


    1. sso인지 아닌지를 판단할때 어떠한 부하가 발생???????

    2. 로그인 페이지라도 sso에 로그인이 되어있다면 리다이렉트가 되어 메인페이지로 로딩이 되어 DB 트랜잭션이 발생?


    실제 부하테스트를 진행하면서 DB 쿼리 수행내역을 확인하거나 , ec2에 로그인하여 해당프로세스의

    cpu와 메모리 사용율을 같이 진행하셔야 할듯 합니다.

  • rockbach
    50
    2021-04-27 16:06:30
    DB를 쓰지 않는 페이지에서도 저런다면 JVM 튜닝과 톰캣 스레드풀 설정을 먼저 확인해 보시고, ramp up없이 과부하를 거시는 것보다 초당 몇 유저씩 점차로 넣어서 해당 장비에서의 최대 capa.를 확인해 보시는게 좋을듯 합니다. 
  • 가넷sw
    200
    2021-04-27 16:11:12

    @BanlnceE


    1. 그룹웨에에서 값을 전달받아 SSO인지 판단하는데 그때 DB접속을 한번 진행합니다.

    그렇지 않은 경우는 DB접속을 진행하지 않고 jsp 페이지만 열게 됩니다. 부하부분을 잘 모르겠습니다.


    2. 넵. DB를 접근하게 됩니다. 로그인 대상자인지 확인하고 로그인 대상자이면

    - 대상자인지 확인하기 위한 select

    - 로그를 남기기위해 insert

    등의 DB 작업을 합니다.


    제가 부하테스트를 진행하지 않고 몇십명의 사용자가 제 페이지에 접근했을때 일부 사용자에게서 웹페이지가 열리지 않는 현상이 발생했습니다.


    만약 DB에 대한 부하라고 한다면 어떤 설정을 변경하여야 하는지 궁금합니다.

    1) 예를 들어 Tomcat의 DB connection 수를 늘려야 한다던지

    2) 제 프로그램에 DB 접근 방식이나 문제점을 찾아 변경하여야 하는지에 대한 부분인지를 알고 싶습니다.


    말씀하신대로 DB접근때문인것 같은데 어떻게 대처해야 할지 잘 모르겠습니다;;;


  • 가넷sw
    200
    2021-04-27 16:13:16

    @ rockbach


    해당내용에 대한 튜닝 및 스레드풀 설정에 대한 참고문헌 및 방법을 알수 있는 곳이 있을까요?


    말씀하신대로의 테스트 방식을 적용해 얼마나 capacity가 가능한지 알고 싶은데 방법을 잘 모르겠습니다.


    조언 주시면 한번 해보겠습니다.

  • BalanceE
    498
    2021-04-27 17:02:05

    정확하게 확인하지 않아도 현재까지의 내용으로는

    메모리, cpu사용률 또는 DB의 문제라고 생각됩니다.


    말씀하신것처럼 대상자와 로그에 대한 DB접속만이 존재한다면, ( 공통으로 보여지는 메인페이지가 아니라면 캐싱을

    적용할 수 없겠죠) 전자의 경우가 가능성이 있을듯 합니다.


    현재의 서버 성능, java memory ( 프로세스가 실행될때, -Xmx 용량을 설정하지 않으면 os가 가용 가능한 범위내에서

    자동 설정하는것으로 알고 있습니다. ec2에서 최대한으로 할당할 수 있는 메모리를 설정해보시지요)


    이후 위에 댓글쓴 분이 말씀하신것처럼 초반 5명으로 시작하여 부하를 줘서 테스트해보셔야할듯합니다.

    top을 찍어 cpu와 메모리 사용량을 체크하시고 사용량이 얼마 안되는데도 같은 현상이면 그때 DB를 의심해야할듯 하네요

  • 가넷sw
    200
    2021-04-27 17:14:35

    @BalanceE 



    1. Tomcat의 경우 bin 폴더의 service.bat 또는 catalina.bat에 아래와 같이 설정하면 Tomcat 성능 및 JVM의 성능을 개선하는 것이 맞는지요?


    set CATALINA_OPTS=-Xms512M -Xmx1024M -XX:PermSize=256M -XX:MaxPermSize=512M

    set JAVA_OPTS=%JAVA_OPTS% -Xms512m -Xmx8192m -XX:MaxPermSize=256m -server


    2. 위의 작업을 진행했음에도 동시접속자가 발생했을때 동일한 속도가 진행된다면

    Tomcat에서 DB Pool 설정 등의 방법을 적용하는 예를 알려주셨으면 합니다.

  • rockbach
    50
    2021-04-28 10:50:58

     @가넷sw

    VM 튜닝은 위에 언급하신 내용대로 하시되 CATALINA_OPTS와 JAVA_OPTS의 값이 상이 합니다. 어떤게 적용되었는지는 VM 기동후에 파라미터를 보셔야 할것 같습니다. 그외에 톰캣 튜닝은 아래 링크를 참고하시면 좋을듯 합니다.

    https://ehdvudee.tistory.com/30


    capa.를 찾는 방법은 부하를 초기에는 1명, 몇 초 뒤에 1 ~ 5명, 정도로 단계적으로 늘려서 테스트를 해보시면 됩니다. 네트워크 Loss가 없다고 가정하면 TPS가 곧 처리량이 될것이고 이 상태로 TPS가 꺾이는 상태(또는 장비의 CPU가 full로 사용되는 상태)가 되면 그 상태가 최대 capa.라고 보시면 됩니다. 단 이때는 VM/OS(network, file descriptor)/톰캣/구현 로직의 튜닝이 다 된 상태일때 의미가 있습니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.