서버 부하 궁금한 점

송지석의 이미지

FC3에 apache+mysql+php 로 작은 규모의 서버를 운용하고 있습니다.
사용자는 10명 이내고요.

Cpu0 : 0.9% us, 0.4% sy, 0.3% ni, 95.3% id, 3.2% wa, 0.1% hi, 0.0% sitop을 치면 위처럼 idle이 많이 나오는 게 보통입니다. 그런데 웹서비스를 하면 us(cpu 사용량)는 별로 변화없는데 wa : waiting 이 거의 100%를 차지 하는 경우가 생깁니다. 아래처럼요.

top - 15:41:39 up 12 days,  3:57,  6 users,  load average: 0.13, 0.13, 0.10
Tasks: 135 total,   1 running, 134 sleeping,   0 stopped,   0 zombie
Cpu(s):  3.7% us,  1.3% sy,  0.0% ni,  0.0% id, 94.4% wa,  0.7% hi,  0.0% si
특히 php+db 쪽에서 심합니다. 디스크를 기다리는 건지 뭘 하는 건지 모르겠네요. 어디가 병목인지 알 방법 있을까요? FC1에서는
CPU states:  cpu    user    nice  system    irq  softirq  iowait    idle
           total    0.0%    0.0%    0.1%   0.0%     0.0%    0.0%   99.8%
이런식으로 좀더 보기 쉽게 나왔었는데 FC3에서는 보기가 어렵네요. 예전처럼 보는 옵션도 없는 것 같고.. 서버의 스펙에 비해 너무 응답이 느려질 때가 있어서요.. IDE 하드를 썼어도 이렇게 느릴 것 같진 않아서 말이죠.. (P4 2.8G, 256MB, IDE hdd )
정태영의 이미지

http://gentoo-portage.com/sys-apps/dstat/

dstat 을 시도해보세요..
iostat 와 vmstat 를 대체할 프로그램입니다 :)

결과는...

Quote:
root # dstat
----total-cpu-usage---- --disk/hda- --net/eth0- ---paging-- ---system--
usr sys idl wai hiq siq|_read write|_recv _send|__in_ _out_|_int_ _csw_
0 0 100 0 0 0| 0 0 | 0 0 | 0 0 | 0 0
0 1 99 0 0 0| 0 0 | 484B 970B| 0 0 | 999 22
1 0 99 0 0 0| 0 0 | 60B 404B| 0 0 |1002 7
1 0 99 0 0 0| 0 4096B| 286B 298B| 0 0 |1008 15
0 0 100 0 0 0| 0 3072B| 180B 404B| 0 0 |1005 13
1 0 99 0 0 0| 0 0 | 120B 298B| 0 0 |1006 13
0 0 100 0 0 0| 0 0 | 240B 404B| 0 0 |1005 9
1 0 99 0 0 0| 0 0 | 300B 298B| 0 0 |1009 11

아무옵션없이 실행시킬 경우 인터럽트가 들어올때까지 계속 stat을 체크해줍니다...

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

송지석의 이미지

고맙습니다. 편리하네요.
DB 억세스 하는 부분에서 (로그인하거나 게시물 목록 볼 때)

----total-cpu-usage---- -disk/total -net/total- ---paging-- ---system--
usr sys idl wai hiq siq|_read write|_recv _send|__in_ _out_|_int_ _csw_
  0   0  62  38   0   0| 820k    0 |1419B 1066B| 820k    0 |1097   445
  7   1   0  92   0   0|3140k    0 | 212B  406B|3140k    0 |1218   684
 10   2   0  87   1   0|2712k    0 | 106B  368B|2712k    0 |1219   827
 21   2   0  77   0   0|2784k   12k|9451B 16.2k|2732k    0 |1227   738
 10   4   0  85   1   0|2764k  528k| 593B  368B|2736k    0 |1225   867
 21   3   0  76   0   0|2460k  220k|1372B 3441B|2448k    0 |1240   915
 49   4   0  47   1   0|2960k  144k|1633B 3945B|2544k    0 |1265   840
  6   1   0  93   0   0|2268k    0 |1447B  368B|2044k    0 |1185   675
 40   3  52   5   0   0| 208k    0 |2758B 10.6k|   0     0 |1061   487

read를 많이 하긴 하네요. 저정도면 많은 건지 모르겠군요. 혹시 서버 운용 해보신 분 있으시면 평가좀 해주실 수 있을까요?
사용자 수도 적고 DB 크기도 6MB 정도 밖에 안되거든요...
정태영의 이미지

어떤 디비를 사용하시나요?

데이타베이스들은... 테이블 캐쉬등이 있기 때문에 디비크기가 겨우 6메가 정도밖에 안된다고 하고... 정상적으로 인덱스등을 사용하여 접근한다고 한다면... 처음 한번 테이블을 메모리에 올릴 경우를 제외하고는... 거의 디스크에 접근할 일이 없을 텐데요 ;)

(물론... sorting 등을 하게 될 경우 임시파일을 만들어서 하게 되므로 인덱스를 효율적으로 사용하지 않는다면 얘기가 살짝 달라질 수도 있겠군요 ;) )

----total-cpu-usage---- --disk/sda----disk/sdb- --net/eth0- ---paging-->
usr sys idl wai hiq siq|_read write _read write|_recv _send|__in_ _out_>
  2   0  98   0   0   1|   0     0 :   0     0 |2118B 70.0k|   0     0 >
  1   0 100   0   0   0|   0     0 :   0     0 |1284B 33.6k|   0     0 >
  0   1  99   0   0   0|   0     0 :   0     0 |2673B 51.5k|   0     0 >
  0   0 100   0   0   0|   0  59.5k:   0     0 |1104B 21.8k|   0     0 >
  0   0  99   0   0   0|   0     0 :   0     0 | 930B 8772B|   0     0 >
  0   0 100   0   0   0|   0     0 :   0     0 | 852B 14.4k|   0     0 >
  0   0 100   0   0   0|   0     0 :   0     0 |1688B 45.9k|   0     0 >
  0   0  99   0   0   0|   0  12.5k:   0     0 |2207B 54.0k|   0     0 >
 10   1  89   0   0   0|  24k  409k:   0     0 |2783B 33.3k|   0     0 >

free 등을 쳐서 swap 을 많이 사용하고 있지는 않은지 체크해 보시고... 그런 게 아니고 메모리의 여유가 있다면... 디비의 설정을 고쳐서 캐쉬를 늘려보세요 :D

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

sh.의 이미지

Quote:
FC3에 apache+mysql+php 로 작은 규모의 서버를 운용하고 있습니다.
사용자는 10명 이내고요.

원 질문에 mysql이라고 말씀을 하셨네요 :)
송지석의 이미지

음.. php 옵션에 버퍼링 옵션을 켜고 커널을 smp 버전으로 부팅하니까 좀 나아졌습니다. 이젠 느려지거나 하지 않네요...

 36   4  58   2   0   0| 112k    0 |13.7k 34.6k|   0     0 |1120   972
  0   0 100   0   0   0|   0     0 | 378B  368B|   0     0 |1010    18
  0   0  99   1   0   0|   0   172k| 106B  368B|   0     0 |1045    41
 75   6  19   0   0   1|   0     0 |6009B 25.0k|   0     0 |1068   501
mushim의 이미지

dstat 의 자료로 볼때 그전에 서버가 느려보이는것은, 메모리가 부족해서 그렇습니다.

dstat 의 paging in/out 은 swap in/out 을 뜻합니다.

php 옵션을 바꾸고, 시스템을 재시작 하셨다고 했는데,

아마 메모리 리크가 있떤 프로세스가 죽었거나 혹은 아파치 프로세스당 사용하는 메모리양이 줄었을 가능성이 크군요.

구체적으로 어떤 php 옵션을 바꾸셨다는건지 궁금하군요.

송지석의 이미지

output_buffering = Off

output_buffering = 4096
로 바꾸어주었습니다.

송지석의 이미지

확실히 업타임이 좀 되니까 페이징이 점점 생기는군요. 음....

살펴보니까 httpd 프로세스가 메모리를 너무 먹네요. 음.. --;; 이거 어떻게 하면 될까요?

]$ ps axv |grep httpd | grep -v grep
 3477 ?        Ss     0:02     80   245 20794 1868  0.7 /usr/sbin/httpd
 9333 ?        S      0:12   1537   245 30674 12660  5.1 /usr/sbin/httpd
 9334 ?        S      0:16   1604   245 30926 12032  4.8 /usr/sbin/httpd
 9335 ?        S      0:17   1534   245 31438 11932  4.8 /usr/sbin/httpd
 9336 ?        S      0:08   1395   245 31438 6264  2.5 /usr/sbin/httpd
 9337 ?        S      0:15    975   245 31434 10776  4.3 /usr/sbin/httpd
 9338 ?        S      0:08   1629   245 30534 12016  4.8 /usr/sbin/httpd
 9339 ?        S      0:09   1295   245 30678 10504  4.2 /usr/sbin/httpd
 9340 ?        S      0:12   1508   245 31150 10932  4.4 /usr/sbin/httpd
 9521 ?        S      0:11   1788   245 30590 13212  5.3 /usr/sbin/httpd
 9523 ?        S      0:08   1767   245 30678 12292  4.9 /usr/sbin/httpd
 9529 ?        S      0:10   1369   245 30618 12336  4.9 /usr/sbin/httpd
10580 ?        S      0:08   1451   245 30666 9612  3.8 /usr/sbin/httpd
10581 ?        S      0:11   1730   245 30602 11864  4.8 /usr/sbin/httpd
10582 ?        S      0:12   1123   245 30670 12012  4.8 /usr/sbin/httpd
10583 ?        S      0:07   1322   245 30702 10392  4.2 /usr/sbin/httpd
10584 ?        S      0:08   1354   245 30694 9584  3.8 /usr/sbin/httpd
10585 ?        S      0:10   1248   245 30674 12192  4.9 /usr/sbin/httpd
10586 ?        S      0:09   1211   245 30670 11468  4.6 /usr/sbin/httpd
12484 ?        S      0:02    383   245 28946 10704  4.3 /usr/sbin/httpd
12488 ?        S      0:03    215   245 30590 9692  3.9 /usr/sbin/httpd

그냥 메모리를 늘려야 하나...

<IfModule prefork.c>
StartServers 8
MinSpareServers 5
--->MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 100
</IfModule>
일단 요걸 20에서 10으로 줄여보긴 했는데 이게 성능 메모리 부족을 해결할 수 있을 지.. -_-;;;

어떻게 하면 될까요?

우수한의 이미지

아파치쪽이나 mysql쪽이나 튜닝할 부분은 조금씩 있겠지만...
아파치2를 MPM=worker 로 설치할 경우
httpd 프로세스가 차지하는 메모리는 줄어듭니다.
(이때 php4보다는 php5를 권장합니다.)

우수하지 않아요. '우수한'은 옛날 만화 CityHunter에서 따와서 쓰던 별명. ;-)

송효진의 이미지

output_buffering 옵션은 끄는게 좋습니다.
echo 한것을 모았다가 뿌린다는겁니다. 괜히 메모리만 잡습니다.

worker 추천 한표 더.

송지석의 이미지

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

옵션엔 이렇게 되어있습니다. MPM=worker 가 되어있는 것은 아닐 지..(아파치 잘 모릅니다. MPM이 뭔지도..) 그런데 worker랑 prefork랑 서로 배타적인 옵션인가요? prefork도 옵션이 있고 worker도 옵션이 있는데요. 흠..
오늘 아침 보니 메모리 잡아먹는 게 더 늘었습니다. 10개 프로세스로 해도 각 프로세스가 잡아먹는 용량이 늘어가는군요... 어젠 다 4.x 였는데..
14564 ?        Ss     0:00      0   245 19206 10280  4.1 /usr/sbin/httpd
14567 ?        S      0:00     15   245 19206 10432  4.2 /usr/sbin/httpd
14568 ?        S      0:00     15   245 26682 18412  7.4 /usr/sbin/httpd
14569 ?        S      0:00      0   245 26782 18528  7.5 /usr/sbin/httpd
14570 ?        S      0:00      0   245 26774 18560  7.5 /usr/sbin/httpd
14571 ?        S      0:00      0   245 26694 18432  7.4 /usr/sbin/httpd
14572 ?        S      0:00      0   245 26782 18524  7.5 /usr/sbin/httpd
14573 ?        S      0:00      1   245 26690 18400  7.4 /usr/sbin/httpd
14574 ?        S      0:00      0   245 27246 19032  7.7 /usr/sbin/httpd
송지석의 이미지

locate로 찾아보니 httpd.worker라는 실행파일이 있네요.

init.d/httpd 스크립트에 다음과 같이 되어있습니다.

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}

여기서
httpd=${HTTPD-/usr/sbin/httpd.worker} 로해주면 될 거 같긴한데..
Quote:
PHP will refuse to start.

이부분이 맘에 걸리네요.
php는 4를 사용해야만 할 것 같습니다. 배포판을 건드리고 싶지 않아서 말이죠...
송효진의 이미지

mod_php 도 worker 에 맞추어 컴파일 해야 합니다.
해당 아파치를 .configure 에서 지정해 주고 컴파일 하면 됩니다.

atie의 이미지

서버 셋팅의 문제라기 보다는 메모리가 적은 것과 db를 읽는 php 코드의 문제가 아닐까 싶은데요. 6M DB를 한 사용자 마다 3M가 읽고 있는 것이 이상해서요.

----
I paint objects as I think them, not as I see them.
atie's minipage

익명 사용자의 이미지

송효진 wrote:
mod_php 도 worker 에 맞추어 컴파일 해야 합니다.
해당 아파치를 .configure 에서 지정해 주고 컴파일 하면 됩니다.

worker 에서 mod_php 는 많이 다른가요?

debian 에서 worker 패키지를 설치하려 하면, prefork , mod_php 를 삭제해 버리네요.

debian 패키지로는 mod_php 가 안됩니다. 따로 컴파일 해야 한다면, 난감.(debian sarge)

뭔가 잘못한것인지 모르겠습니다.

송지석의 이미지

네. 한번 worker로 해놓고 실행해보니까 mod_php가 thread safe 하지 않다고 에러를 냅니다. 윗분 말씀처럼 worker로 하려면 mod_php를 새로 깔아야 할 겁니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.