I/O Debugging

Clip to Evernote

블로그가 이사를 갔어요!

죄송합니다! 대부분의 글을 유지하고는 있으나 일부는 유지하지 못했습니다!
10초 이내에 새로 옮겨진 페이지로 이동할 겁니다.
원하시는 글이 아니면 전체 목록을 확인해주세요!
소용환의 생각저장소 / 아카이브

맨날 리눅스 리눅스 하면서도, 참 아는 게 없다. 어쩌면 Technician 수준. I/O가 마구 치솟는데, 누가 그러는지를 모른다. iotop을 떠올리는데도 한참 시간이 걸렸다. 체득되어있지 않은 게지. iotop을 쓰려고 보니 설치되어 있지 않았다. 준비되어 있지 않은 것이고, ㅎㅎ 시간을 꼭 내서 Admin's Tool을 만들어둬야...

암튼, 다음과 같은 방법으로 대충 바쁜 놈을 잡을 수는 있다. 그런데 정량적으로 뽑기는 거의 불가능한 듯.

[root@skcc-omspap2 ~]# sysctl -w vm.block_dump=1; sleep 3; sysctl -w vm.block_dump=0 [root@skcc-omspap2 ~]# dmesg | more

암튼, 좀 부끄러운...

'토막상식' 카테고리의 다른 글

I/O Debugging  (0) 2012.06.12
Oracle 성능, Bind Variable, PreparedStatement  (0) 2012.03.21
TextMate, RailsCast의 선택? :-)  (0) 2012.01.05
kpartx, create device mappings for partitions  (0) 2011.12.27
트랙백 0 댓글 0

댓글을 달아 주세요

Oracle 성능, Bind Variable, PreparedStatement

Clip to Evernote

블로그가 이사를 갔어요!

죄송합니다! 대부분의 글을 유지하고는 있으나 일부는 유지하지 못했습니다!
10초 이내에 새로 옮겨진 페이지로 이동할 겁니다.
원하시는 글이 아니면 전체 목록을 확인해주세요!
소용환의 생각저장소 / 아카이브

매번 볼 때 마다 까먹으니깐 일단 기록.

한참 옛날 이야기지만, 어떤 여성 포털에 당시 일하던 회사에서 서버를 납품한 적이 있었다. LVS로 엮은 웹서버가 한 다섯 대 정도 있었고, DB서버가 8way 였던가? 한 대 들어갔다. 웹 개발 회사에서 납품한 PHP기반의 웹서비스가 돌아가기 위한 환경이었는데, 웹서버는 놀고 있는데 DB 서버의 Load가 50까지 차 올라갔다. (물론, 사이트가 꽤 떴었고, 사용자의 폭발적 증가가 근원적 문제였다. 문제 아닌가? 암튼,)

결국, 여기 저기 파해쳐본 결과, 일단 PHP로 개발된 웹 Application이 수준 이하였던 것이 가장 큰 이유였고, (세션 관리의 부재, 과다한 DB Query 발생 등등) 그 다음은 사용하는 SQL문이 Bind Variable을 사용하지 않는 RAW Statement(어떤 전문 용어가 있는지는 모르겠다.)였다는 것.

일단, PHP의 세션 기능을 이용하도록 Application을 수정하고, DBMS 연동을 위한 shared code를 만들어 사용하게 했고, SQL문을 Bind Variable을 사용하도록 수정했다.

말할 것도 없지만, 결과는 엄청난 Load 감소.

이 과정에서 문제는... DBA들은 문제가 해결되기 전까지 그냥... 시종 일관, DB에는 문제가 없다는 말만 반복했다는 아픈 기억. 그렇지... SQL 문법 오류도 없고 그냥 부하가 많았던 거였지... ㅎ

세월도 흐르고, 장소도 다르지만, 이 오래된 문제는 지금도 있는 듯. 역시, 일단 서버 성능 문제가 부각되겠지만... 암튼, 용어를 기억해두려고.

  • bind variable, PreparedStatement
  • 임시 방편으로, init{SID}.ora 파일에서 CURSOR_SHARING=FORCE 설정
  • DSS나 QUERY REWRITE를 사용할 때에는 사용하지 말라고 함.
prompt
prompt * SQL문 parsing time 구하기
prompt
SELECT NAME, 
 VALUE 
FROM V$SYSSTAT
WHERE NAME = 'parse time cpu'
or NAME = 'parse time elapsed'
or NAME like 'parse count%';

뭐 일단, 여기까지.

'토막상식' 카테고리의 다른 글

I/O Debugging  (0) 2012.06.12
Oracle 성능, Bind Variable, PreparedStatement  (0) 2012.03.21
TextMate, RailsCast의 선택? :-)  (0) 2012.01.05
kpartx, create device mappings for partitions  (0) 2011.12.27
트랙백 0 댓글 0

댓글을 달아 주세요

kvm, kvmclock, crazy train, "Guest WORK HARD!"

Clip to Evernote

블로그가 이사를 갔어요!

죄송합니다! 대부분의 글을 유지하고는 있으나 일부는 유지하지 못했습니다!
10초 이내에 새로 옮겨진 페이지로 이동할 겁니다.
원하시는 글이 아니면 전체 목록을 확인해주세요!
소용환의 생각저장소 / 아카이브

그냥 급하게 진행해버려서 로그를 다 놓쳤다. 아무튼, 내 kvm Guest가 미친듯이 달렸다. 이게 처음 겪는 일은 아닌데, 지난 번 사고때는 그냥 "뭐냐~" 하면서 재시작해버렸다. 그러나 이번엔 원인 규명을 위해 약간의 정보를 더 얻어봤다.

1. 어떻게 달리나?

증상은 이렇다. 먼저 미친 기관차에 strace를 걸었을 때,

rt_sigaction(SIGALRM, NULL, {0x7f8c00851300, ~[KILL STOP RTMIN RT_1], SA_RESTORER, 0x7f8bffee9060}, 8) = 0
write(8, "\1\0\0\0\0\0\0\0", 8)         = 8
read(17, 0x7fffe6b5b1b0, 128)           = -1 EAGAIN (Resource temporarily unavailable)
timer_gettime(0, {it_interval={0, 0}, it_value={0, 0}}) = 0
timer_settime(0, 0, {it_interval={0, 0}, it_value={0, 250000}}, NULL) = 0
timer_gettime(0, {it_interval={0, 0}, it_value={0, 203522}}) = 0
select(20, [7 10 16 17 18 19], [], [], {1, 0}) = 1 (in [7], left {0, 999997})
read(7, "\1\0\0\0\0\0\0\0", 512)        = 8
select(20, [7 10 16 17 18 19], [], [], {1, 0}) = 1 (in [17], left {0, 999955})
read(17, "\16\0\0\0\0\0\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 128) = 128

이런 내용을 무지하게 뿌리고 있었다. 단순히 이 내용을 보고 "Resource temporarily unavailable" 오류를 만드는 fd 17에 집중하게 됐는데, 찾아보니,

sio4@sun:~$ sudo ls -l /proc/10815/fd
total 0
...
lrwx------ 1 libvirt-qemu kvm 64 2012-03-09 13:33 10 -> anon_inode:[signalfd]
lrwx------ 1 libvirt-qemu kvm 64 2012-03-09 13:33 14 -> anon_inode:kvm-vcpu
lrwx------ 1 libvirt-qemu kvm 64 2012-03-09 13:33 15 -> anon_inode:kvm-vcpu
lrwx------ 1 libvirt-qemu kvm 64 2012-03-09 13:33 16 -> socket:[104985]
lrwx------ 1 libvirt-qemu kvm 64 2012-03-09 13:33 17 -> anon_inode:[signalfd]
lrwx------ 1 libvirt-qemu kvm 64 2012-03-09 13:33 18 -> socket:[104986]
lrwx------ 1 libvirt-qemu kvm 64 2012-03-09 13:33 19 -> /dev/net/tun
lrwx------ 1 libvirt-qemu kvm 64 2012-03-09 13:33 3 -> socket:[104980]
lrwx------ 1 libvirt-qemu kvm 64 2012-03-09 13:33 4 -> /dev/ptmx
lrwx------ 1 libvirt-qemu kvm 64 2012-03-09 13:33 5 -> /dev/kvm
lrwx------ 1 libvirt-qemu kvm 64 2012-03-09 13:33 6 -> anon_inode:kvm-vm
lrwx------ 1 libvirt-qemu kvm 64 2012-03-09 13:33 7 -> anon_inode:[eventfd]
lrwx------ 1 libvirt-qemu kvm 64 2012-03-09 13:33 8 -> anon_inode:[eventfd]
...
sio4@sun:~$

signalfd 라는데... 이 정체는 뭘까?

아차! Terminal log buffer를 다 날렸다고 해놓고 어떻게 잡았냐고? 혹시나 정상적인 VM을 trace했더니 같은지 비슷한지... 이런 결과가 나왔다.

2. 찾아본 내용

먼저, 리소스 관련 로그를 기반으로 찾아봤더니, VM이 사용할 clock 관련 글들을 몇 개 찾을 수 있었다. 현상으로 봐도 뭔가 연관이 있을 것도 같다. 하지만... 문제의 의도적 재현이 되지 않는 상황에서 연관성이 있는지 확인은 하지 못했다. 좀 두고 봐야 할 문제네.

guest needs to boot with clock=acpi_pm

3. 기타

요거 문제 해결하려고 VM 내의 syslog를 보려 했더니 온통 DHCP lease 관련 로그로 범벅이 되어 있다. 서버라지만 고정IP를 쓰는 것은 좋아하지 않으므로 그것을 고칠 생각은 없고, DHCP 서버의 lease time을 조정하고 싶은데 libvirt/kvm에 의해 자동 실행되는 dnsmasq의 parameter를 바꿀 수 있는 방법을 쉬 알 수 없네.

dnsmasq 자체만 보면, --dhcp-range 옵션의 ',' 분리된 인수 중 세 번째로 leasetime을 줄 수 있도록 되어있는데, kvm의 xml 기반 network 설정에는 해당 기능이 없는 듯 하다. 좀 더 알아보고, 요청을 하든지...

트랙백 0 댓글 1

댓글을 달아 주세요

  1. call518 -- 2012.03.09 16:48 | 수정/삭제 | 댓글쓰기 | 댓글주소

    소과장님! 잘지내시죠? KVM 검색하다가 들왔네요 ㅎㅎ
    예전에 호스팅사 있을때, 타이머로 고생 무진장 했었던... ACPI 2.0/3.0에서 문제가 생겼던 것 같아요. 그 뒤에는 BIOS단에서 hpet 타이머를 지원해주는게 좋다~라는 스레드도 보였구요. 그기 사람들한테 물어보니 타이머 이슈는 아직도 간간히 터지고 있다고 하네요ㅎㅎ; 그냥 뻗고~ 안뻗어도 시간 무진장 빨리가고요~ 암튼 내공이 물씬 풍기는 자료 잘보고 갑니다~
    http://sourceforge.net/tracker/?func=detail&atid=893831&aid=1970154&group_id=180599

잡것들! 망할 ActiveX, 그리 간단하지 않은 연말정산간소화

Clip to Evernote

블로그가 이사를 갔어요!

죄송합니다! 대부분의 글을 유지하고는 있으나 일부는 유지하지 못했습니다!
10초 이내에 새로 옮겨진 페이지로 이동할 겁니다.
원하시는 글이 아니면 전체 목록을 확인해주세요!
소용환의 생각저장소 / 아카이브

연말정산간소화 서비스를 싸잡아 욕할 생각은 없지만, 그 것을 구성하고 있는 IT 요소들 중에는 욕먹을 것들이 꽤 있을 것 같다.

오늘은 연말정산간소화 서비스를 이용해서 내역 출력을 하려고 하는데, 무슨 아무런 경고도 없이 뭐라 뭐라 경고를 내더니 유일한 선택인 "OK" 버튼을 눌렀더니만 모든 Explorer 창이 닫혀버린다. 이게 무슨 봉변? (그것도 모르고 "OK" 누른 내가 나쁜가?)

망할 ActiveX, 뭔가 수동 설치가 필요하구만... 그런데 수동설치 안내도 나오지 않고... 여차 저차 관련된 부분(인쇄)의 수동 설치를 시도했으나... 설치프로그램인 Setup_NTS.exe를 실행시키면,

응용 프로그램 구성이 올바르지 않기 때문에 이 응용프로그램을 시작하지 못했습니다.

라는 메시지만 남기고... 설치는 되지 않는다. 아... 구성이 올바르지 않구나... 참~ 친절하신 윈도우님! 왜 윈도가 쉽다고들 하시는지...

뭐야... 포기하고 다른 사람의 PC를 이용하려다가 조금 검색을 해봤더니, 이게 심심한 오류는 아닌가보다. 결론은, Microsoft Visual C++ 2008 Redistributable Package 요런걸 설치하면 된다고 해서, 해봤더니 정말 된다!

정말 간단하게 된다! 이렇게 간단하게 되는 것을 왜! 최초 배포자는 함께 배포하지 않는 것이지? 제목도 Redistributable이라고 되어있구만! 대충 요약 설명을 읽어보면 당연히 함께 배포해야 되는 요소로구만!

단순히 ActiveX를 쓰는 것 만이 문제가 아니다. 자신이 뭘 만들고 있는지, 그리고 그것이 구동하기 위해서는 어떤 조건이 필요한지, 최소한의 노력도 없는 소프트웨어 회사들이여... 제발... 척박한 소프트웨어 환경 이야기만 하지 말아라.


트랙백 0 댓글 0

댓글을 달아 주세요

TextMate, RailsCast의 선택? :-)

Clip to Evernote

블로그가 이사를 갔어요!

죄송합니다! 대부분의 글을 유지하고는 있으나 일부는 유지하지 못했습니다!
10초 이내에 새로 옮겨진 페이지로 이동할 겁니다.
원하시는 글이 아니면 전체 목록을 확인해주세요!
소용환의 생각저장소 / 아카이브

이 세상이... TextMate라는 편집기가 있었다. 나만 몰랐나? 엄청 좋아보인다.

뭘 좀 만들다보니, 우연히 RailsCast라는 온라인 비디오 강좌를 보게 되었는데, 강좌 내용보다 먼저 눈에 들어온 것이 강의에서 사용하는 Text Editor 였다. 본래 배우고, 쓰려던 그것은 잠시 잊고, 이 에디터가 뭔지... 궁금증을 풀어야 했다.

찾아봤더니, 이 곳에 RailsCast에 대해 잘 설명되어 있었다. 무슨 도구를 쓰는지, 어떤 TextMate 테마를 쓰는지까지. (http://railscasts.com/about)

그런데 문제는 다른 곳에 있다. TextMate는 MacOS 전용이라는 것. 허거걱!

그래서... "TextMate for Linux"라고 엉뚱한 검색어를 던져봤더니, 역시나 몇 개가 나온다.

  • TextMate for Ubuntu Linux (link)
  • VimMate - TextMate for Linux (link)

이름으로 보면 VimMate가 더 땡기는데, 일단 검색결과 살펴보는 버릇 때문에 (순전히 그 버릇 때문에) TextMate for Ubuntu Linux라고 되어있는 것을 먼저 봤는데, gedit를 TextMate와 유사하게 꾸며주는 또는 동작하게 만들어주는 방법과 플러그인 등이 설명되어 있다.

그럴싸하다. 동작은 사실, TextMate 조차 잘 모르기 때문에... 잘은 모르겠으나, HTML 등을 편집할 때 자동으로 입력을 도와주는 기능 등은 정말... 멋지다! 빠를 뿐만 아니라, 실수도 막아준다.

그런데... 그것 참 이상하지... vim에게 너무 길들여진 나는(그렇다고 vim을 능수능란하게 잘 활용하는 것도 아니면서) 이 환경이 좀 어색하다. 마우스를 찍으면 커서가 옮겨갈테고, 아마도 연신 콜론을 찍어댈텐데... 바꿀 수 있을까?

일단... 설정만 한 상태에서... 그냥 접어뒀다.

다음에 시간이 되면, VimMate를 좀 봐야겠다. 역시 난 이게 어울릴 것 같다.

트랙백 0 댓글 0

댓글을 달아 주세요