석그
기억하지말고기록하기
석그
전체 방문자
오늘
어제
  • 분류 전체보기 (75)
    • Docker (2)
    • WEB (10)
      • apache (5)
      • nginx (2)
      • 인증서 (1)
    • WAS (10)
      • wildfly (9)
      • jboss (0)
      • tomcat (0)
    • DevOps (7)
      • Jenkins (2)
      • Influx (2)
      • Ansible (1)
      • gitlab (1)
      • squid (1)
    • ELK (4)
      • elasticsearch (2)
      • Kibana (0)
      • Logstash (2)
    • 리눅스 명령어 (6)
    • GIT (0)
    • 알고리즘 (0)
    • 쉘스크립트 (8)
    • Centos7 (5)
    • TEST (6)
    • Scouter (0)
    • 에러모음 (9)
    • 기타 (4)
      • tool (4)
    • grafana (2)
    • VirtualBox (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 도커 커밋
  • shellcheck
  • 도커이미지저장
  • apache
  • 서버공유
  • docker 커밋
  • 멀티인증서
  • 문법확인
  • 쉘패키지
  • 플레이북
  • 와일드카드인증서
  • jboss-cli.sh
  • 쉘문법
  • 깃허브
  • 싱글인증서
  • cli스크립트
  • jkmount
  • 파일변수처리
  • scouter
  • 도커
  • 로그크기
  • 인증서패스워드
  • 변수처리
  • fallocate
  • 뒤에서 값자르기
  • 젠킨스
  • 도커 로드
  • ansible
  • Customizable Alert
  • Bad GateWay

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
석그

기억하지말고기록하기

Apache Worker 튜닝 및 부하 테스트
WEB

Apache Worker 튜닝 및 부하 테스트

2022. 11. 26. 18:58

mpm 설정

<IfModule mpm_worker_module>
   ServerLimit             2  # 구성가능한 child 프로세스의 재한 수 
   StartServers            2  # 시작시에 초기화되는 서버 프로세스의 개수 (default : 3) / prefork default:5,
   MaxClients            128  # 동시에 접속할 수 있는 Client의 상한, 즉 Precess 수 x Thread 수
   MinSpareThreads         7  #새로운 방문자를 바로 처리하기 위하여 대기하고 있는 최소 쓰레드 개수
   MaxSpareThreads        10  #새로운 방문자를 바로 처리하기 위하여 대기하고 있는 최대 쓰레드 개수(보통 ThreadsPerChild 값이랑 같게 설정)
   ThreadsPerChild        64  # 프로세스당 쓰레드 수(ThreadLimit와 거의 같은 의미)
   MaxRequestsPerChild  3000  #자식프로세스가 서비스할 수  있는 최대 요청 개수(0은 무한대), 
							  #오래된 프로세스들을 죽이고 새로운 프로세스를 시작하는 것에 의해 프로세스 리사이클 주기를 얼마나 할지 설정
</IfModule>

ServerLimit * ThreadsPerChild=2*64 =128

 

MaxClient (default : ServerLimit x ThreadsPerChild)

- 동시에 처리될 최대 커넥션(request)의 수

- MaxClients 수치를 초과한 후 온 요청들은 ListenBackLog에 의해 큐잉됨

- ThreadsPerChild 옵션과 매우 긴밀하게 작용함

- 동접자가 많을 경우, 이 MaxClient값을 증가시켜야 함.

- OS의 FD(File Descriptor)값을 증가 시켜 MaxClient 의 상한값을 증가시키도록 할 것

설정 설명
ServerLimit (default : 16) -  child 프로세스의 제한 수.
-  ServerLimit 값이 필요 이상 높게 설정 된다면, 쓸데 없이 미사용 공유 메모리가 할당 되므로 적절하게 설정 필요.
-  MaxClient 와 ThreadPerChild 에서 요구한 프로세스 수보다 높게 설정하지않음.
StartServers (default : 3) - Apache기동시에 띄울 프로세스 개수
- 자식 프로세스의 수는 부하에 따라 동적으로 변경되기 때문에 이 설정은 큰 의미가 없다.
MinSpareThreads (default : 75) - Request spike를 처리할 최소 idle 쓰레드 수 
- 만약 서버에 idle 쓰레드가 충분하지 않다면 child 프로세스는 idle 쓰레드가 MinSpareThreads 보다 커질때까지 생성된다.
MaxSpareThreads (default : 250) - Idle 쓰레드의 최대 수 
- 만약 서버에 너무 많은 idle 쓰레드가 존재하면 child 프로세스는 idle 쓰레드가 MaxSpareThreads 수보다 작아질 때까지 죽는다.
ThreadsPerChild (default : 64) - 각 child 프로세스가 생성한 쓰레드 수 
- Child 프로세스는 기동시 ThreadsPerChild 개수만큼 쓰레드를 생성하고 결코 더 이상 생성하지 않는다. 
- 만약 worker 방식의 MPM을 사용중이라면, 전체 쓰레드 수는 평상시 부하를 처리할 만큼 충분히 많아야만 한다.
MaxRequestsPerChild - 각 각의 child 프로세스가 처리할 request의 수를 제한. 
- MaxRequestsPerChild 개수를 처리한 후, child 프로세스는 종료(die)된다. 
- 0으로 설정하면 무한대
- MaxRequestsPerChild 를 0 이외의 값으로 설정하는 것은 프로세스가 (혹시나) 메모리 누수로 사용할 수 있는 메모리 양을 제한한다.
ThreadLimit (default : 64) - child 프로세스의 라이프주기 동안 ThreadsPerChild 의 최대 설정값을 설정한다.
- 이 지시자를 사용할 때는 특별한 주의가 필요하다. 
- ThreadLimit 가 ThreadsPerChild 보다 훨씬 높게 설정된다면, 여분의 미사용 공유 메모리가 할당될 것이다.
- ThreadLimit 과 ThreadsPerChild 모두 시스템이 다룰 수 있는 것 보다 높게 설정한다면, 아파치가 기동되지 않거나 시스템이 불안정하게 될 수 있다. 
- 이 지시자를 당신의 최대 예상 ThreadsPerChild 의 설정보다 높게 설정하지 마라.

 

 

 

 ab 패키지 설치후 테스트

 

1
[root@hwagtest extra]# ab -n 1000 -c 300 -g result.plot  http://test.com/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
 
Benchmarking test.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
 
 
Server Software:        Apache        # 아파치 버전을 표시
Server Hostname:        test.com      # 특정사이트의 이름
Server Port:            80              # 웹서비스 사용 포트 번호
 
Document Path:          /             # 초기 문서가 존재하는 웹문서 root위치
Document Length:        299 bytes     # 초기 문서의 크기
 
Concurrency Level:      300
Time taken for tests:   0.347 seconds  # 응답시간(매우 중요한 결과 값)
Complete requests:      1000           # 요구에 응답완료한 세션 수
Failed requests:        0              # 요구에 응답실패한 세션 수 
Write errors:           0             
Non-2xx responses:      1000
Total transferred:      473000 bytes   # 총 전송 바이트 수
HTML transferred:       299000 bytes   # 총 전송한 HTML 바이트 수
Requests per second:    2881.84 [#/sec] (mean) # 초당 응답 요구 수
Time per request:       104.100 [ms] (mean)  # 요구에 응답한 시간(단위 micro second, 중요한 결과값)
Time per request:       0.347 [ms] (mean, across all concurrent requests)  # 요구에 응답한 시간
Transfer rate:          1331.16 [Kbytes/sec] received   # 초당 전송 가능한 용량
 
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    5   4.9      3      17
Processing:     1   41  31.5     39     219
Waiting:        1   40  31.3     38     214
Total:          3   46  32.2     42     231
 
Percentage of the requests served within a certain time (ms)
  50%     42
  66%     49
  75%     57
  80%     62
  90%     91
  95%    110
  98%    135
  99%    148
Colored by Color Scripter
cs

 

 

 gnuplot 데이터를 활용한 로그 그래프 그리기

1) gnuplot 설치

[root@localhost ~]# yum install gnuplot

gnuplot설치


2) 그래프 생성

[root@localhost ~]# ab -n 1000 -c 300 -g result.plot  http://test.com/
3) 스크립트 생성

[root@loclahost ~]# vi script.plot

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 터미널 사이즈 조정(이미지 사이즈)
set terminal png size 1024,768
 
# 가로, 세로 비율
set size 1,0.5
 
# 결과 파일 설정
set output "result.png"
 
# 범례/key 위치
set key left top
 
# y축 grid line
set grid y
 
# Label the x-axis
set xlabel 'requests'
 
# Label the y-axis
set ylabel "response time (ms)"
 
# Tell gnuplot to use tabs as the delimiter instead of spaces (default)
set datafile separator '\t'
 
# Plot the data
plot "result.plot" every ::2 using 5 title 'response time' with lines
cs



4) 이미지 생성

[root@localhost ~]# gnuplot script.plot

 

result.png

 

'WEB' 카테고리의 다른 글

[apache] /favicon.ico HTTP/1.1" 404 에러 없애기.  (0) 2022.09.29
    'WEB' 카테고리의 다른 글
    • [apache] /favicon.ico HTTP/1.1" 404 에러 없애기.
    석그
    석그

    티스토리툴바