본문 바로가기
[임종민]OutOfMemory 해결 방법론 – 그때 그 시절 꿈을 간직하고 있으면 실현할 때가 온다. 괴테의 말이 아닌 나의 삶 자체가 그랬다. JAVA OOM(OutOfMemory) 원시적 해결기법 2005년도 무렵의 일이다. 지금은 원시적 방법일 수 있지만 APM이나 메모리 프로파일링 툴이 없을때 급할 때는 간간이 쓰는 fast memory leak 특정유형의 대처방법에 대해서 살펴본다. 예전 모 사이트에서 SUN, HP계열에서 OutOfMemory가 났을 때 유일하게 썼던 방법들이 가비지 콜렉션 로그 및 thread dump 이다. 그 외 수행되었던 history를 아는 access log정도? 그때는 APM은 커녕 관련 문제를 디버깅하기 위한 효과적 툴이 부족했던 것이 사실이었고 메모리문제를 해결하기가 정말 어려운 과제여서 엔지니어들이 두려워하는 영역이었다.. 2009. 4. 9.
[신대경]Parallelism 그까이거 뭐… 시간이 점점 흐르고 버전이 올라 가면서 Oracle과 SQL Server가 점점 닮아 가고 있다. 하지만 여전히 다른 점 또한 존재한다. 다른 점 중에 하나인 병렬 처리 방식을 소개하고자 한다. Oracle과 SQL Server의 병렬 처리 방식은 근본적으로 다르다. Oracle의 경우 기본적으로 CPU를 1개만 사용한다. 필요에 의해 parallel query가 수행되도록 하려면 다음과 같이 3가지 방법으로 정의할 수 있다. 1. instance level, init.ora file 내에 정의한다. 2. table level, create/alter table 문장에서 정의한다. 3. query level, PARALLEL hint에서 정의한다. 반면에 SQL Server는 기본 값이 병렬처리다. 필요.. 2009. 4. 3.
[이창훈]수많은 생각보다 한 번의 시도를 하자 오라클 교육과정을 거치면서 이정도면 충분하지 않을까? 생각해 본 적이 있다. 그러나 머지않아 그 한계를 느끼게 되고, ‘이제부터 시작이구나’ 라는 생각을 다시금 하곤 한다. Dynamic Performance View (V$), 막연하게 Database Performance 관련 정보를 수집하여 V$로 명명된 View 라는 것만 알고 있었지, 정작 직접 쿼리해 보며, 레퍼런스 문서를 뒤지고 각각의 뷰들을 조인해 본 적이 없었다. 아마도 내가 무엇을 원하는지 몰랐고, 구현해야 될 목표가 없어서 한번 읽어 보기만 하고, ‘아 이렇구나’ 하고 이해만 하고 만 것이다. 그 결과 어느정도 시간이 흐른 후, 내용은 머리에서 금방 잊혀졌다. 때 마침 Maxgauge 성능 모니터링 툴을 사용하면서, 여기서 보여 지는 .. 2009. 3. 26.
[방기남]진리를 향한 끊임없는 열망 엑셈 개발팀의 주력 개발툴은 델파이(Delphi)다. 델파이는 매번 새로운 버전을 내놓을 때마다 당시 신기술을 접목시켜 발표하여 왔고, 최근 DELPHI 2009 버전을 출시하면서 유니코드, 제네릭, Ajax & Silverlight 기반 웹 어플리케이션 등 새로운 기술로 다시 한 번 다가왔다. 사실, 이렇게 나날이 발전해 나가는 기술과 뒷받침하는 개발툴을 제대로 사용한다는 것은 참 어렵기만하다. 늘 사용해왔었고 검증된 방법으로만 개발하기 때문이랄까...새로운 뭔가를 찾아보지만 결국 다람쥐 쳇바퀴 도는 듯한 느낌만 든다. 엑셈 개발팀에 입사한지 어느덧 4개월이 되어간다. 하지만, 엇그제 일 같다. UDB팀에 합류한 이후 계속해서 달려온 느낌이다. 많은 것을 새로 배웠고, 모니터링 툴과 UDB에 대한 이해.. 2009. 3. 20.
[황종필]기본으로부터의 발상의 전환 차세대 시스템 프로젝트가 한 달여 남은 클라이언트에 1주일(5일)간 지원을 가게 되었다. 4일째 내가 할 일이 거의 다 마무리 되어가고 있어 안심이 되고 있을 때 한가지 재미있는 이야기를 들었다. "INSERT문이 60초씩 대기하는 경우가 있어요! 하지만 어떤 경우에 대기하는지, 무엇이 문제인지 모르겠어요! " 난 내심 이렇게 생각했다. "음! 간단할 것 같기도 한데 뭐가 문제라는 거지? 저 문제를 해결하고 보고서를 쓰면 복귀시간하고 얼추 맞을 것 같네. " 이런 생각에 담당자분께 그 문제를 도와드리겠다고 선뜻 나섰다. 이것이 시련의 시작이라는 것은 생각지도 못하고... 우선 담당자분께서 알려주신 시간대에 MaxGague 로그를 찾아 보았다. "음. 몇시간을 찾아 헤매었지만 문제의 세션을 찾을 수가 없네.. 2009. 3. 10.
[이창원]넓은 시야에 대한 성찰 모 고객사에 2주 동안 가서 컨설팅 지원을 하라는 팀장님의 엄명이 급하게 내려졌다. 나는 이에 순한 양마냥 넵 하고 사전 탐사를 떠났다. 담당자도 이미 뵈었던 분이셔서 인사를 드리고 잠깐 시스템을 점검하고, 우리 회사의 Oracle 모니터링 툴인 Maxgauge를 구동시켰다. 그리고 Real time Monitor를 이용하여 살짝 상황을 지켜봤다. 그런데 이게 왠일인가. Database밖에 없다던 서버는 CPU가 100%를 꾸준히 유지하고 있었다. 그리고 담당자께서도 CPU를 증설해도 상황이 나아지지 않는다고 설명해주셨다. 그래서 Database의 일량을 살며시 살펴보았다. 어머… Session Logical Reads가 초당 50000 블록을 넘지 않고 있었다. 무언가 정체를 알 수 없는 Process.. 2009. 2. 13.
[이홍원]IPCS 이야기 ipcs 이야기를 해 보련다. 왜? 이게 뭣에 쓰는 물건인고 하면서도 알맹이만 쏙쏙 뽑아먹고 있는 자신의 모습이 우스꽝스러워 좀 알고 쓰자란 생각이 들었기 때문. whreis ? 누구냐 넌 RH3@PROD : /home/oracle>$whereis ipcs ipcs: /usr/bin/ipcs /usr/share/man/man8/ipcs.8.gz 오라클 명령어는 오라클 디렉토리에 있는걸 생각했을 때 오라클과는 무관한 명령어같다. ( 글 후반부에 이르러 오라클과 관계없다는 것을 확신한 자신이었다… ) 디렉토리 보니 오라클은 아닌 것 같고 성급히 개안의 경지에 이르려다 man 으로 확인 해 보았다 RH3@PROD : /home/oracle>$man ipcs ( manual 의 man 이다 ) IPCS(8) L.. 2009. 1. 16.
[신형규]달면 삼키고 쓰면 뱉는다. 개발팀에 입사하고 이것저것 새로운 지식들을 탐구하고 습득하게 되면서 나의 부족함에 대해 매번 느끼게 된다. 그런데 이런 부족함 속에서도 안 좋은 습관이 있었으니 그것을 한 마디로 표현 하자면 감탄고토(甘呑苦吐). 즉, 달면 삼키고 쓰면 뱉게 된다는 식의 습관이었다. 신입이기에 아직 부족한 경험과 지식들로 중무장한 머리에서는 상황에 적절한 것들을 사용할 수 있는 개념들이 있음에도 불구하고 일단 쉽고 나한테 편리한 것들을 가져다가 사용하는, 좋지 못한 습관을 가지게 되었다. 최근에 이러한 습관으로 지내오다 뜻밖의 수확을 얻은 것이 있었으니, 바로 TObjectList였다. 우리 제품뿐만이 아니라 어느 델파이 프로그램이건 간에 가장 많이 등장하는 자료구조 중 하나는 List일 것이다. 보통 class Obje.. 2009. 1. 9.
[이누리]아직은 어려운 TStringList 회사에 입사한 2개월이 조금 넘는 동안 이런 저런 소스분석 할 때 마다 나오는 것이 있었다. 그것은 바로 TList와 TStringList!! 매우 자주 사용되고 있었다. 하지만 나에게는 너무 어렵고 복잡하기만 했다 그래서 사용하지 않아볼까 생각도 했지만 워낙 많이 사용되어 피해 갈 수 없었다. 이 두가지 중 TStringList에 대해서 적어보려한다. TStringList와 TList의 차이는 스트링 자체를 갖는 것과 포인터를 넘기는 차이가 있다. TStringList는 델파이 유닛중 Classes라는 유닛에 기본적으로 포함되어 있는 클래스다. TStringList = class(TStrings) 위와 같이 TStrings를 상속 받고 있다. TStrings와 TStringList는 다르다. { 상속관.. 2008. 12. 19.