Skip to content

서버 점검 : 자원 및 apache, mysql

조회 수 23513 추천 수 0 2008.12.10 22:03:58

1. top & vmstat로 서버의 부하상태를 확인

[root@localhost ~]# top

top - 16:50:02 up 6 days, 18:34,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  72 total,   1 running,  71 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0% us,  0.0% sy,  0.0% ni, 100.0% id0.0% wa,  0.0% hi,  0.0% si
Mem:    515536k total,   505444k used,    10092k free,    48972k buffers
Swap:  1052248k total,     1480k used,  1050768k free,   116768k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1   root        16    0   2668   548   468  S  0.0        0.1       0:03.53  init
    2   root        34   19      0      0       0  S  0.0        0.0       0:00.02  ksoftirqd/0
    3   root         5  -10      0      0       0  S  0.0        0.0       0:00.32  events/0
    4   root         7  -10      0      0       0  S  0.0        0.0       0:00.02  khelper
    5   root        15  -10      0      0       0  S  0.0        0.0       0:00.00  kacpid
   17   root         5  -10      0      0       0  S  0.0        0.0       0:00.00  kblockd/0
   18   root        15    0       0     0       0   S  0.0        0.0       0:00.00 khubd
   35   root        15    0      0      0       0   S  0.0        0.0       0:00.36 pdflush
   36   root        15    0      0      0       0   S  0.0        0.0       0:00.25 pdflush
 
    <중간생략>

[root@localhost ~]# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
 r  b       swpd   free   buff   cache        si   so       bi    bo       in    cs   us sy id wa
 0  0       1480   10156  49000 116788         0    0         2     6        49    44     0    0 100  0
 0  0       1480   10156  49000 116788         0    0         0     0     1006    39     0    0 100  0
 0  0       1480   10156  49000 116788         0    0         0     0     1004    52     0    0 100  0
 0  0       1480   10156  49000 116788         0    0         0     0     1004    37     0    0 100  0
 0  0       1480   10156  49000 116788         0    0         0     0     1005    40     0    0 100  0
프로세스          메모리                   스왑    하드(IO)  시스템/네트웍  CPU

[top]

1.  uptime 
uptime이 너무 길어도 시스템이 자원을 효율적으로 사용하지 못하는 경우가 생긴다.
>>한달 ~ 두달정도에 한번은 리부팅 권장

2. load average 
앞에서 부터 1분간, 5분간, 10분간 CPU가 처리못하는 프로세스의 평균을 말한다.
>> 10만 넘어도 서버에 부하가 극심하다.


3. CPU

1) cy 
사용자가 사용하는 CPU의 양을 나타낸다.
>> top상에서나 프로세스 리스트로 확인하여 불필요한 것이면 kill하고 정상적인 프로세스가 많은 양을 차지하고 있다면 시스템의 자원이 부족한 것이다.

2) sy 
시스템이 사용하는 CPU의 양을 나타낸다. (커널모드로 넘어간 상태)
>> 부팅중이거나, 파일시스템체크 등의 시스템상에서 작업중이 아닌이상 정상운영 중인 서버에서는 거의 발생을 하지 않는 것이 정상이다.
>> 50%이상이 지속적으로 발생할 경우 IO에 문제가 있는 것이다.

3) id 
CPU가 쉬고 있는 것을 나타낸다.
>> 만약 다량의 메모리 사용 및 스왑이 일어나고 실제 시스템에 부하가 생기고 있는 id가 높으면 CPU 장치의 문제이다. 


4. MEM 
메모리는  전체 = 버퍼 또는 캐쉬 + 프리 의 비례로 효율적으로 메모리 자원을 사용하는지 확인한다.
>> used가 많다고 무조건 메모리가 부족한 것이 아니라, used가 오디에 사용되고 있는지 판단해야 한다.
>> 서버의 부하는 극심한데 메모리가 계속 버퍼없이 프리로 잡혀있다던지, 계속 버퍼로만 사용되고 있으면 시스템이 메모리를 제대로 사용하고 있지 못하고 있는 것이다.

5. swap 
메모리의 경우와 마찬가지로 서버 부하에 따른 적절한 스왑이 발생해 줘야 한다.


[vmstat] 
top에서 확인한 내용을  vmstat로 추가 확인

1 프로세스
 r : 실행되고 있지 못하는 프로세스의 수를 말하는 것으로 3이상이면 부하상태로 볼 수 있다.

2.  메모리
top에서 보다 자세하게 사용현황을 알 수 있다.

3. 스왑
스왑 인/아웃의 발생양을 알 수있다.

1) so(스왑아웃) 
스왑이 메모리로 할당된 양, 이 양이 많다면 서버의 부하상태를 확인
>> 부하가 없는데 스왑이 많이 발생하고 있다면 시스템에 문제가 있다
>> 시스템에 부하가 많은데 스왑이 발생하고 있다면 시스템이 자원을 효율적으로 사용하고 있지 못하고 있다.

2) si(스왑인) 
스왑아웃된 내용이 다시 필요하게 될 경우 이을 다시 불러오는 것


4. IO

1) bo : block device로 부터 받은 blocks
>> 하드디스크가 어떤 명령에 의해 사용되고 있는 정도를 말한다.
>> 지나치게 높으면 하드에 문제가 있는 것

2) bi :  block device에 보낸 blocks 
>> 외부 요청에 의해 하드가 사용중인 것을 말한다.


5. system

1) in : 인터럽트를 말하며, 버퍼/캐쉬로 저장된 내용의 작업이 아닌 요청이 들어올 경우 발생한다.
>> 대량의 인터럽트가 불규칙 발생할 경우 문제가 있는 것이다.

2) cs :  초당 발생한 context switches (문맥교환)의 수
>> 쉽게 말해 네트워크 부하를 말한다.

6. CPU
top에서의 내용과 유사, wa 작업요청대기 중


# 추가적으로 top에서 us가 높으면 프로세스 리스트에서도 확인 해 볼 필요가 있다. 

[root@localhost ~]# ps aux | sort +4n | tail -10
daemon   11687  0.0  6.7 335052 34968 ?      Sl   Oct24   1:00 /usr/local/apache/bin/httpd -k start
daemon   11685  0.0  6.6 335188 34236 ?      Sl   Oct24   0:55 /usr/local/apache/bin/httpd -k start
daemon   11682  0.0  6.6 335740 34360 ?      Sl   Oct24   1:00 /usr/local/apache/bin/httpd -k start
daemon   11678  0.0  6.6 335760 34268 ?      Sl   Oct24   1:02 /usr/local/apache/bin/httpd -k start
daemon   11689  0.0  6.7 336552 34568 ?      Sl   Oct24   0:58 /usr/local/apache/bin/httpd -k start
daemon   10726  0.0  6.6 336688 34264 ?      Sl   Oct24   1:01 /usr/local/apache/bin/httpd -k start
daemon   11676  0.0  6.6 336776 34248 ?      Sl   Oct24   0:59 /usr/local/apache/bin/httpd -k start
daemon   11648  0.0  6.7 336868 34852 ?      Sl   Oct24   1:00 /usr/local/apache/bin/httpd -k start
daemon   11681  0.0  6.7 338108 34776 ?      Sl   Oct24   1:02 /usr/local/apache/bin/httpd -k start
mysql     2441  0.0 12.3 538464 63428 ?      Sl   Oct22   3:15 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --pid-file=/usr/local/mysql/data/localhost.localdomain.pid --skip-external-locking --port=3306 --socket=/tmp/mysql.sock


[apache]

1. 증상 : apache 데몬은 살아 있고 사이트가 아예 안뜬다면,

- MaxClinet 의 문제일 가능성이 많다.
>> ps aux | grep httpd 해서 엄청나게 많이 뜨면, httpd.conf에서 MaxClinet  확인

2. 증상 : apache 데몬은 살아 있고, 사이트가 뜨지만 아주 느리게 뜬다.

- apache logs 가 2G가 넘지 않는가 확인
[root@localhost ~]# cd /usr/local/apache/logs/
[root@localhost logs]# du -sh
2.7G

-df 파티션 용량이 꽉차지 않았나 확인
[root@localhost logs]# df -Th
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/hda3     ext3   1012M  256M  705M  27%   /
/dev/hda1     ext3     99M    23M    72M  24%   /boot
none         tmpfs    252M     0  252M   0% /dev /shm
/dev/hda9     ext3     15G   70M    15G     1%   /home
/dev/hda8     ext3    494M   11M  458M    3%  /tmp
/dev/hda7     ext3    4.9G    1.1G  3.5G   24%  /usr
/dev/hda5     ext3    9.7G    9.7G    0M  100%  /usr/local
/dev/hda6     ext3    4.9G    144M  4.5G   4%  /var
    
- 웹소스상에 include이 있는가 확인
>> include 된 사이트의 접속상태를 확인.: include된 사이트의 MaxClients 문제의 가능성이 있다.
>> 소스에 include에 많으면 사이트가 느릴 수 밖에 없다.

3. 증상 : 사이트는 빠르게 뜨는 편이나 db 관련된 부분이 느리게 로딩 됨
>> dbl쪽의 부하
>> db 서버가 분리도어 있다면 웹서버가 아닌 db 서버에서 부하가 생긴 것이다.

4. 서버에 부하도 없고 apache 설정상에 문제가 없는데 알 수 부하가 계속 발생한다면,
- 2.0.x 버전의 worker 방식으로 설치된 apache라면 prefork로 재컴파일
- 아니면, 아파치 버전을 2.2.x 버전으로 올린다.

5. KeepAlive On / off
- 도메인이 커뮤니티 또는 다중도메인 호스팅의 경우,  --> off
>> netstat -anp 상에서 80포트로 여러곳에서 많은 양의 접속자가 있을 시

- 도메인수가 적고, 접속자가 그렇게 많지 않거나, 집중되지 않는다면 --> On
>> Timeout 값은 default 30에서 15또는 10으로 낮춰주는 것이 과도한 부하 발생을 예방할 수 있다.
 


[mysql]

1. 프로세스리스트 확인 (실시간 디비쿼리 확인)

 
[root@localhost ~]# mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 11977 to server version: 5.0.27-log

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.


mysql> show processlist;
+-------+------+-----------+------+---------+------+-------+------------------+
| Id       | User  | Host         | db    |Command| Time| State   | Info                    |
+-------+------+-----------+------+---------+------+-------+------------------+
| 11977  | root   | localhost   | NULL| Query    |    0    | NULL  | show processlist |
+-------+------+-----------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)


프로세스 ID time 값과 state를 확인한다.
>> time 값이 크면 클 수록 쿼리에 부하가 생기고 있다는 것이다.


2. mysqladmin -p status

[root@localhost ~]# mysqladmin -p status
Enter password:
Uptime: 585141  Threads: 1  Questions: 49402  Slow queries: 0  Opens: 112  Flush tables: 1  Open tables: 106  Queries per second avg: 0.084

>> 여기서는 가장 중요하게 확인 해야 할 부분이 한 쓰레드가 처리되는데 초당 평균이값이다.  

3. 테이블수와 db용량 확인
>> 너무 많으면, 부하가 발생하는 것이 정상이다.

[root@localhost logs]# mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 11997 to server version: 5.0.27-log

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> use mysql;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql                |
+---------------------------+
| columns_priv                     |
| db                                    |
| func                                 |
| help_category                   |
| help_keyword                   |
| help_relation                     |
| help_topic                         |
| host                                 |
| proc                                 |
| procs_priv                        |
| tables_priv                        |
| time_zone                        |
| time_zone_leap_second     |
| time_zone_name               |
| time_zone_transition          |  
| time_zone_transition_type   |
| user                                 |
+---------------------------+
17 rows in set (0.00 sec)

[root@localhost ~]# cd /usr/local/mysql/data
[root@localhost data]# du -sh
36M 

profile

일요일은 짜빠게뤼~ 먹는날~^^

엮인글 :
http://adminplay.com/1038/634/trackback
List of Articles
번호 제목 글쓴이 날짜 조회 수
27 외국 자료실 (Unix Linux Windows) ADMINPLAY 2009-02-04 18930
26 파일시스템 체크 ADMINPLAY 2009-01-22 20163
25 top 명령어 정리 ADMINPLAY 2009-01-10 18652
24 콘솔에서 로그인이 안될때 ADMINPLAY 2008-12-29 21289
23 OS 종류 및 버전확인 ADMINPLAY 2008-12-23 21729
22 마우스 오른쪽 버튼 막기... ADMINPLAY 2008-12-14 19111
21 /var 디렉토리 용량이 갑자기!!! ADMINPLAY 2008-12-14 20270
20 CentOS 5 32bit에서 메모리 4G 지원하기 ADMINPLAY 2008-12-10 20883
19 single mode readonly 파티션 rw로 다시 마운트 ADMINPLAY 2008-12-10 23354
18 실시간 접근정보 확인 ADMINPLAY 2008-12-10 22122
17 kernel panic 발생 시 자동으로 리부팅 설정 ADMIN 2008-12-10 24127
» 서버 점검 : 자원 및 apache, mysql ADMIN 2008-12-10 23513
15 리눅스에서 실수로 삭제한 파일을 복구 ADMIN 2008-12-10 23637
14 각종 데몬 이름 및 설명 ADMIN 2008-11-25 13825
13 리눅스 - 하드디스크 추가, 파티션 및 마운트 ADMIN 2008-11-12 18315
12 리눅스 전원부터 부팅이 되기까지의 과정이해 ADMIN 2008-11-11 60818
11 Maskrading ADMIN 2008-11-11 61986
10 강제로 언마운트 하기 ADMIN 2008-11-11 20550
9 부분적으로 yum 업데이트 하고 싶을때 ADMIN 2008-11-10 17118
8 리눅스에서 계정 생성시 자동으로 디렉토리가 생성되게 하... ADMIN 2008-11-04 21658

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234