제 고민좀 한번 들어 보시겠어여..(Interrupt 문제)

kamagod의 이미지

제 고민 해결좀 해주세여.

하드웨어 사양
모델 : HP DL380G5
CPU : Intel Xeon 5150(2.66GHz) * 2
Memory : 6G
HDD : Raid5(DISK 5)

소프트웨어 사양
OS : CentOS5.4 64Bit(2.6.18-164)
WEB : lighttpd
MYSQL : 5.0.77

현재 고객 사이트를 운영중에 있습니다.
운영하면서 오후 08시 ~ 11시쯤에는 사이트가 너무 느려지는 현상이
발생되고 있습니다.
이를 해결 하려고 시스템 모니터링을 해보았지만
메모리 사용량 : 2G
디스크 공간은 남아돔
IO 성능은 굿
vmstat 측정값 중에 프로세스 대기 큐(r) 값이 가끔 11~20정도 수준
top 결과 mysql에서 cpu 사용률 100~300% 왔다 갔다.

위 정도 수준입니다. 다른 부분은 이상이 없고 mysql이 CPU 사용률(100%)이 많아 부하가 오는것으로 보입니다.
다른 부분은 괜찮은데 CPU 사용률이 너무 높아 혹시나 해서 cat /proc/interrupts 내용을 확인 하였습니다.
아 근디 프로세서 4개중에 한쪽으로 쏠림 현상이 발생되는 것이 아닙니까. (아래 캡춰내용 참조)
CPU0 CPU1 CPU2 CPU3
0: 2712262070 0 0 0 IO-APIC-edge timer
1: 3 0 0 0 IO-APIC-edge i8042
8: 1 0 0 0 IO-APIC-edge rtc
9: 0 0 0 0 IO-APIC-level acpi
12: 4 0 0 0 IO-APIC-edge i8042
14: 138758714 82150 0 0 IO-APIC-edge ide0
98: 0 0 0 0 IO-APIC-level uhci_hcd:usb5
106: 101 0 0 0 IO-APIC-level uhci_hcd:usb6
130: 557307644 320336 44067 0 PCI-MSI-X cciss0
162: 1746935524 0 2999716 0 PCI-MSI eth0
169: 32 0 0 0 IO-APIC-level ehci_hcd:usb1, uhci_hcd:usb2
177: 0 0 0 0 IO-APIC-level uhci_hcd:usb3
185: 11278 0 0 0 IO-APIC-level uhci_hcd:usb4
NMI: 7873861 6830496 8509468 8813306
LOC: 2666237743 2693201770 2666237603 2693201628

이걸 어찌 해결 해야 할지 제 고민좀 해결 해주세여. irqbalance는 올렸습니다. 여태 올리지 않다(irqbalance) 문제점을 인식하고
올렸네여. 이것이 해결점은 아니겠지만 개발자가 딴지를 걸고 해서 진실 규명을 하기 위해 이부분이 해결 되어야 할꺼 같아서여.

두가지 질문 드리겠습니다.
1. Interrupts 해결 방안(현재 irqbalance 데몬은 올린 상태임)을 시원하게 풀어 주세여 ㅜㅜ
2. top 정보(맨 아래 확인 해주세여)에서 프로세스별 상태를 확인 하면 정확히 분배 되는것 처럼 보입니다. top 정보와 /proc/interrupts 정보가 둘중에 하나가 정확하지 않은 정보 같은데
어떤것이 정상적인 결과 일까요?

두서 없이 작성해서 올립니다.
그럼 즐거운 금요일 되시고 주말은 푹쉬세여 편안한 하루 되시기 바랍니다.

-------------- top 정보 -------------------

[root@aaa acpi]# top
top - 09:29:37 up 180 days, 12:46, 3 users, load average: 2.87, 3.36, 3.14
Tasks: 355 total, 4 running, 350 sleeping, 0 stopped, 1 zombie
Cpu0 : 44.5%us, 10.0%sy, 0.0%ni, 43.9%id, 1.7%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 49.0%us, 11.9%sy, 0.0%ni, 39.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 40.7%us, 9.3%sy, 0.0%ni, 48.3%id, 1.3%wa, 0.0%hi, 0.3%si, 0.0%st
Cpu3 : 30.6%us, 11.6%sy, 0.0%ni, 57.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 5977560k total, 5533660k used, 443900k free, 224332k buffers
Swap: 2096440k total, 132k used, 2096308k free, 3851708k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2940 mysql 15 0 1749m 480m 3868 S 186.2 8.2 453:42.98 mysqld

ydhoney의 이미지

1. /proc fs는 파일 내용이 아주 툭하면 바뀌니까(1초에 몇번 바뀔까요? :-) ) 계속 보시는게 아니면 잘 모르실거구요.

2. mysql쪽은 쿼리튜닝 하세요. 일단 i/o 이슈는 아니니까 full scan query성이거나 그런건 아닌것 같고 cost가 높은 query가 많은 것 같습니다. Cost Based의 Query Tuning을 해야 할 듯 합니다.

다른건 별로 보실 것 없습니다.

그리고 추가로 확인할 사항

1. 느린게 정확하게 서비스 전체 중 어느 서비스 항목의 부하인지 확인할 필요가 있긴 할 것 같습니다.

2. 이거..DB서버랑 웹서버 한대에서 같이 돌고 있나요? -_-;

3. Network Bandwidth

정도만 확인하시면 될 것 같습니다.

그럼..

kamagod의 이미지

1. /proc fs는 파일 내용이 아주 툭하면 바뀌니까(1초에 몇번 바뀔까요? :-) ) 계속 보시는게 아니면 잘 모르실거구요.
- /proc쪽의 데이터 툭하면 바뀌지만 interrupt내용은 누적이라 1년동안 재부팅이 없었는데 ㅜㅜ
2. mysql쪽은 쿼리튜닝 하세요. 일단 i/o 이슈는 아니니까 full scan query성이거나 그런건 아닌것 같고 cost가 높은 query가 많은 것 같습니다. Cost Based의 Query Tuning을 해야 할 듯 합니다.

다른건 별로 보실 것 없습니다.

그리고 추가로 확인할 사항
- 정확한거는 mysql 쿼리 문제는 알고 있지만 자꾸 개발자가 시스템에 이상이 있다고 딴지를 걸어서여 ㅜㅜ iostat로 io 부하를 확인하고 모니터링 해보았지만 음 전혀 Read나 write하는 데이터가 별로
없습니다. ㅜㅜ

1. 느린게 정확하게 서비스 전체 중 어느 서비스 항목의 부하인지 확인할 필요가 있긴 할 것 같습니다.
- 일부 시간때에 약 3초정도 느리다고 하는데 아 저에게는 3초는 그리 중요하지 않은데 이쪽 커뮤니티 이용자 분들이 느리다고 항의가 들어 오나봅니다. 돈주고 시스템을 늘리라고 해도 돈이 없어서ㅜㅜ

2. 이거..DB서버랑 웹서버 한대에서 같이 돌고 있나요? -_-;
- 네 시스템 분할하면 좋겠습니다만 역시 회사가 어려우신거 같아서 서버를 구매할 비용이 OTL...

3. Network Bandwidth
- 네트워크 확인 결과 느려지는 시점에서는 트래픽이 최고점은 아닙니다. 약 10M~14MBps 정도 나오는데여
이 이상은 올라가지 않네여. 특별히 네트워크 상태 확인 결과 이상은 없지만 역시 서버 앞단에 더미 허브가 마음에
걸리긴 합니다.

아 정말 개발자분에게 IO 문제는 아니라고 설명하고 자료를 드리는데 음 역시나 계속 RAID 5구성한거에서 cache기능의 write-back 얘기만 하시네여
그걸 한번 해보자고 하는데 밧데리도 없는 RAID를 왜 write-back으로 자꾸 쓰시려고 하시는지 ㅜㅜ

ydhoney의 이미지

개발자가 뭘 어설프게 알면 그렇습니다. 모를려면 아예 모르던가 알려면 제대로 알던가 해야하는데 말이죠.

말이 안통할 것 같으니까 날잡아서 한번 밟아주면 좋겠네요.

kamagod의 이미지

위치 알려주시면 제가 데리고 가겠습니다.

밟아주세요ㅜㅜ

preisner의 이미지

이런식의 대화는 문제를 해결 하기 보다는 개발자와 관계를 더욱 어렵게 만듭니다.

먼저 응답시간이 느려지는 시간대를 확인 하였으면 어떤 페이지 요청시, 또는 어떤 task 실행시 문제가 생기는지 정확하게 확인 해서 개발쪽에 레포팅 해 주는게 운영자의 역활 입니다.
다짜고짜
1. 시스템이 느립니다.
2. 돈 더 들여서 장비 증설 해요.
라는 방안은 누가봐도 승인 받기 어렵습니다.

개발자들이 로그를 남기는 기능을 따로 넣어 놓지 않았다면
노가다를 하는 수 밖에 없습니다.
1. 로그 형식을 바꿔서 해당 시간대에 요청되는 페이지 중 실행 시간이 비정상적으로 긴 페이지를 확인 하세요.
http://httpd.apache.org/docs/2.2/ko/mod/mod_log_config.html
처리시간이 긴 페이지는 원인이 될 수도 있고 현상이 될 수도 있습니다. 잘 확인 하셔야 합니다.

2. mysql 에서 slow query 를 확인 하세요.
http://www.mydigitallife.info/change-or-set-mysql-long-query-time-value-for-log-slow-queries/

3. 기타 다른 task 들이 해당시간에 실행되고 있지 않은지 확인 하세요.
sar 로 해당 시간대에 프로세스 상태를 저장해 놓는 것도 좋은 방법 입니다.

4. 위에서도 이상한 점이 발견되지 않는다면 하드웨어 적인 문제나 설정 오류를 확인 해 보세요.

원인이 되는 task를 찾았으면 해당 task 에서 자원을 붙잡고 있는 원인이 무엇인지 개발자와 함께 상의해 보세요.

원인이 명확하지 않으니 개발자들은 하드웨어 문제를 자꾸 이야기 하는 겁니다.
전형적인 핑퐁 상황이고 개발자들이 딴지 걸수 있는 명분을 님이 자꾸 주고 있는 겁니다.

개발자 못난놈들. 하고 개발자들에게 툴툴 거려봐야 달라지는 건 없습니다.

kamagod의 이미지

그냥 위에 글은 농담이였는데 ㅡ,.ㅡ

하하 답변 감사드립니다.

위 문제 해결 되었습니다. 문제 되던 쿼리 부분을 일단 빼시기로 하셨습니다.