Gooday Note Scrap Source Android login
 
작성일 : 14-02-11 11:44
JMeter 를 이용한 서버 튜닝 테스트
 글쓴이 : 기리 (123.♡.195.24)
조회 : 4,598  
   http://blog.hibrainapps.net/138 [927]
서버튜닝을 통한 테스트를 진행해 본다.

 

* 기본 현재 서버의 상태는 아래와 같다.

- OS : Ubuntu 

- CPU :  2.1Ghz / 16Core

- Memory : 32G

- Apache : Version 2.2.22

- Maria : 5.5.30


1. Default Setting (12:00)

Thread : 100 * X = 20000회 실행

소요시간 :38 Sec





2. (13:27)

Thread : 200 * X = 20000회 실행

소요시간 :31 Sec

Error 률이 26.11%로 높게 나타났다. 이는 mysql 로의 접속 시 "Too Many Connection" 오류로 인한 것이다.

현재 Mysql(MariaDB) 의 

MaxConnection(show variables like '%max_connections%') = 100 으로 설정 되어 있다.

Max_used_connections = 101




3.(14:07)

Thread : 200 * X = 20000회 실행

소요시간 :31 Sec

MaxConnection = 200  으로 변경

Too Many Connection 으로 인한 에러는 줄어들었다.

show status like '%connections%'; 으로 max_used_connection 을 확인한 결과 147로 확인되어 현재 테스트까지는 Max Connection 까지 여유가 있어 보인다.



4.(14:23)

Thread :300 * X = 20000회 실행

소요시간 :33 Sec






5. (14:37)

Apache 의 MaxClients 변경

현재 Apache 서버가 Prefork 방식이므로 apache.conf 파일을 아래와 같이 수정하였다.

<IfModule mpm_prefork_module>

ServerLImit                    null => 1024

StartServers                   5

MinSpareServers           5

MaxSpareServers         10

MaxClients                  150 =>1024

MaxRequestsPerChild   0

</IfModule>

Thread :300 * X = 20000회 실행


apache 의 maxClients 수를 늘림으로 인하여 또 다시 mysql에 대한 Too Many Connection 에러가 발생하였다.



6. (14:44)

MySQL 의 MaxConnection 을 500으로 변경한 후 다시 테스트 

Thread :300 * 70 = 21000회 실행


결과 

Error율은 감소 하였고, mysql의 max_used_connections = 284로 확인 되었다.





7. (17:00)

Apache.conf 의 MaxKeepAliveRequests 100=>10000 으로 변경

MaxKeepAliveRequests : 웹서버 프로세스가 지속적으로 접속을 유지하면서 처리할수 있는 요청 갯수

결과 

6의 결과와  비교하여 별다른 차이점은 없었다.





8. 

Apache 의 StartServers, MinSpareServers, MaxSpareServers 변경

현재 Apache 서버가 Prefork 방식이므로 apache.conf 파일을 아래와 같이 수정하였다.

<IfModule mpm_prefork_module>

ServerLImit                    1024

StartServers                   5 =>20

MinSpareServers           5=>20

MaxSpareServers         10=>40

MaxClients                  1024

MaxRequestsPerChild   0

</IfModule>

SpareProcess 가 많을 수록 폭주에 빨리 대처가 가능하다.

Thread :300 * 70 = 21000회 실행


Apache restart 후 프로세서의 갯수를 확인하면 초기 실행시 기존 5개이던것이 20개인것으로 확인 된다

 ps -ef | grep apache | wc (apache 프로세서의 갯수 확인)

23개로 나타나는데 3개는 실제 서비스가 아닌 부수적인 프로세서로 보면되고 나머지 20개가 child process 이다





9. (17:35)

Apache 의 KeepAliveTimeout 5 =>25 로 변경

KeepAliveTimeout  : KeepAlive 지시어가 On 일때만 유효하며, 이미 열린 connection에서 추가 요청을 기다리며 대기중이다.

KeepAliveTimeout 25 로 설정하면 클라이언트가 25초동안 아무요청이 없으면 프로세스의 연결을 끊는다. 이 값을 60 초 이상으로 올리면 사용자의 요청을 기다리며 아무일을 하지않는 프로세스가 60초동안 떠있게 되는것이다. 자신의 네트웍대역과 부하에 따라 적절히 조절한다





10.(18:10)

mysql 의 MaxConnection 을 넘겨 테스트 요청

MaxConenction :  500

Client1  에서 Thread 300 * 70회 요청

Client2  에서 Thread 300 * 70회 요청 하여 동시접속자수가 500이상이 나오도록 테스트 한 결과 

Apache 에서는 500이상의 접속자를 수용하지만 Mysql 에서 Too Many Connection 오류 발생




11.(10/24.13:48)

Apache MaxClients 10000

Mysql MaxConenction :  1000 으로 설정 

Client1  에서 Thread 300 * 70회 요청

Client2  에서 Thread 300 * 70회 요청 하여 동시접속자수가 500이상이 나오도록 테스트 한 결과 

Apache 동시접속자수 최대 554, Mysql max_used_connection = 554 로 확인





12.(10/24 15:37)

Apache MaxClients 10000

Mysql MaxConenction :  2000 으로 설정 

Client1  에서 Thread 500 * 70회 요청

Client2  에서 Thread 500 * 70회 요청 하여 동시접속자수가 1000이상이 나오도록 테스트 한 결과 

Mysql max_used_connection = 833 로 확인





13.(10/24 17:30)

Apache MaxClients 10000

Mysql MaxConenction :  2000 으로 설정 

Client1  에서 Thread 1000 * 20회 요청

Client2  에서 Thread 1000 * 20회 요청 하여 동시접속자수가 1000이상이 나오도록 테스트 한 결과 

Mysql max_used_connection = 1329 로 확인

Apache 의 동시 접속자 수 = 1365 까지 확인 되었음.





13.(10/24 17:43)

Apache MaxClients 10000

Mysql MaxConenction :  5000 으로 설정 

Client1  에서 Thread 1000 * 20회 요청

Client2  에서 Thread 100* 20회 요청

Client3  에서 Thread 1000 * 20회 요청

 하여 동시접속자수가 1000이상이 나오도록 테스트 한 결과 

Mysql max_used_connection = 2130 로 확인

Apache 의 동시 접속자 수 = 1500 까지 확인 되었음.






아차피 동시접속자 확인하기

netstat -an |grep :80 |grep ES |wc -l
아파치 동시 접속자라기 보다는 TCP 80번으로 연결을 맺은 아이피들의 갯수


참조 

http://hebackblog.blogspot.kr/2013/07/blog-post_10.html

http://loves-textcube.blogspot.kr/2009/06/%EB%B3%B8%EB%AC%B8%EC%8A%A4%ED%81%AC%EB%9E%A9-%EC%95%84%ED%8C%8C%EC%B9%98-20-maxclient%EC%88%98-%EB%8A%98%EB%A6%AC%EA%B8%B0.html

http://geen02.blogspot.kr/2013/01/apache-apache-prefork-worker.html

https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=961&sca=2

http://tiger5net.egloos.com/5672418

http://blog.naver.com/PostView.nhn?blogId=akaroice&logNo=60067572903


저작자 표시 비영리