Tag Archives: 부하

[Linux] sar를 이용하여 서버의 현재 부하상태를 알아보기

사용자 삽입 이미지
서버가 부하가 가중되면 가장 먼저 알아내야 하는것이 원인을 파악하는 것일 겁니다. 하지만 그러기 어려운 상황이라면 가장 먼저 파악해야 하는것이 CPU에서 오는 부하인지 I/O에서 오는 부하인지를 알아내야 할 것입니다.

우선 기본적으로 부하상태(Load Average)를 알아내기 위해 top, w, uptime의 명령어를 활용할 수 있습니다.

top

top - 11:46:06 up 77 days,  1:16,  1 user,  load average: 0.06, 0.15, 0.11
Tasks:  87 total,   1 running,  86 sleeping,   0 stopped,   0 zombie
Cpu(s):  6.5%us,  0.5%sy,  0.0%ni, 92.7%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:   4033528k total,  1571260k used,  2462268k free,    26472k buffers
Swap:  3911816k total,      128k used,  3911688k free,   627956k cached

w

11:47:39 up 77 days,  1:17,  1 user,  load average: 0.08, 0.14, 0.11
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    121.133.79.177   11:13    0.00s  0.01s  0.00s w

uptime

11:47:56 up 77 days,  1:18,  1 user,  load average: 0.06, 0.13, 0.10

top > w > uptime 순으로 보여지는 정보의 양이 적어지는군요. top의 경우에는 실행중인 프로세스의 목록도 표시됩니다. 오늘 언급하려는것은 sar(System Activity Reporter)입니다. 매우 간단하게 부하를 분류하여 보여줍니다.

$ sar
Linux 2.6.18-238.19.1.el5 (Theeye)        09/29/11

16:20:10 CPU %user %nice %system %iowait %steal %idle
16:30:10 all 17.81 0.84  2.75    68.50   0.00   10.10
16:40:23 all 16.75 0.00  3.26    69.68   0.00   10.30
Average: all 17.28 0.41  3.01    69.10   0.00   10.20

위의 시스템은 IO대기가 차지하는 비율이 70%에 육박하는 상태입니다. IO문제가 분명하군요. 보통 DB 서버들이 부하가 걸릴때 위와 같은 모습을 보입니다. 이 경우 메모리를 증설하면 디스크에 읽고 써야 하는 데이터를 그만큼 메모리에 올릴 수 있어 디스크의 IO를 현저히 줄일 수 있습니다.

$ sar
Linux 2.6.18-238.19.1.el5 (Theeye)        09/29/11

14:30:01 CPU %user %nice %system %iowait %steal %idle
15:50:01 all 14.67 0.10  4.51    1.63    0.00   79.08
16:00:01 all 17.06 4.91  4.96    1.53    0.00   71.53
16:10:01 all 14.63 0.00  4.74    1.21    0.00   79.41
Average: all 13.04 2.18  3.98    8.36    0.00   72.45

메모리를 8G에서 16G로 증설한 후의 모습입니다. 정말 신기할 정도로 IO가 줄었네요. sar에서 자주 쓰이는 옵션으로는 다음과 같은 것이 있지 않을까 생각합니다.

-u : CPU 사용율 확인
-P : 특정 CPU의 사용율 확인 (sar -P 0)
-q : Load Average 확인
-r : 메모리 사용 현황 확인

sar는 sysstat 패키지에 포함되어있습니다. 다음과 같이 설치 가능합니다.

$ yum install sysstat

부하직원에게 세세히 설명해주기 VS 스스로 얻도록 유도하기

짧다면 짧고 길다면 길수도 있는(솔직히 길지는 않습니다-_-a) 직장생활을 경험하면서 깨달은 두가지 유형의 상사가 있다는것을 깨달았습니다. 어떤 업무를 지시할때 세세히 설명을 해주는 사람과 그렇지 않은 사람이 있습니다.

전자의 경우에는 어떤 일을 지시할때 ‘왜 이 일을 하는가’, ‘이 일의 목표는 무엇인가’, ‘이일을 했을 경우 회사에 어떤 이득을 기대할 수 있는가’와 같은 업무 자체와는 거리가 있을수도 있는 부차적인 정보를 제공해 줍니다.

후자의 경우에는 어떤 일만을 지시한 후에 담당 직원이 ‘왜 이일을 하는거죠?’와 같은 질문을 하기를 기대하는 경우입니다. 후자의 경우인 2분에게 이야기를 해본적이 있는데 똑같은 대답을 하시더군요.

‘직원이 능동적으로 일하길 바래서’

확실히 능동적인 직원은 후자의 경우에서 능동적으로 물어볼것입니다. 하지만 이것은 커뮤니케이션이 원활한 회사에서나 가능할법한 기술이라고 봅니다. 대부분의 회사는 초기의 창업멤버 시절을 지나 커뮤니케이션에 문제를 겪을수밖에 없다고 봅니다.

이런 시행착오를 겪어 삼성과 같은 인사 관리/운영 시스템을 만들어내게 되는것이겠죠. 대부분의 많은 회사들이 사원의 성향을 분석하여 섞어놓고 적재 적소에 혼합 배치하는 방식을 취하는 것으로 알고 있습니다. 소수의 커뮤니케이션이 능한 능동적인 사원과 다수의 수동적인 사원을 섞어놓아 이끌어주고 따라가는 모습을 만들려는게 아닐까 생각합니다.

하지만 저는 이 모습에 정확히는 직원에게 자세한 정보를 알려주지 않고 궁금하면 물어보라는 정책에 동의를 하지는 않습니다. 거기서 물어보지 않으면 수동적인 직원이 되는것도 아니라고 봅니다. 예전부터 공부를 하다 문뜩 느낀점이 있습니다.

어떤 생소한 분야의 공부를 처음 시작할때 항상 느끼는 점이 ‘내가 무엇을 모르는지를 모른다’라는것이 큰 문제입니다. 그래서 다른사람에게 질문을 하기도 어려움을 겪습니다. 이런데에 도움을 줄수 있는 사람은 같은 문제를 겪은 사람입니다. 하지만 아이러니하게도 대부분은 도움을 줄 수 있는 사람들이 이러한 해결을 할것을 지시하곤 합니다.

많은것을 알고 있는 사람은 상대적으로 모르는 사람이 무엇을 모르는지 아는지를 파악하고 있기 힘듭니다. 알고 있는 사람은 자신의 기준에서 정보를 필터링해서 부하직원에게 알려주곤 합니다.

그 정보를 받은 부하직원은 해당 정보를 받아 자신이 가지고 있는 정보선에서 조립을 하여 처리를 합니다. 이때에 부족함이 느껴진다면 상사에게 질문을 할것입니다. 하지만 문제가 자신의 정보만으로 임의의 판단이 내려질때 입니다.

이 경우 잘못된 판단을 가지고 좁은 시야를 가지고 근시안적인 안목을 가지고 잘못된 방식으로 일을 처리 하게 될것입니다. 이것은 결과적으로 빠른길을 포기하고 돌아가는 길이 될수도 있을것이며 심지어 일을 두번하게 될지도 모릅니다.

‘내가 왜 이일을 하고 있는거지?’, ‘지금 하는 일은 어디에 쓰이는거지?’, ‘회사의 비전은 무엇이지?’

이 모든질문이 대부분의 상사들은 상상도 할수 없을 질문들일것입니다. 모르는 사람은 자신이 무엇을 모르는지 알기도 힘들고 마찬가지로 알고 있는 사람들은 자신이 무엇을 알고 있는지도 알기 힘들지 않을까요?