2008. 9. 5. 23:15

앞서 말한 4가지 중 어떤 것이 주된 원인이 되는지 정형화시키기는 사실 매우 어렵다. 그러나, 일반적으로 분류해 보면, 컴포넌트의 오류와 데이터베이스의 오류가 대부분이다. 혹은 이 둘의 복합적인 양상을 띠게 된다.

일반적으로 컴포넌트 오류로 인한 문제는, 주기적으로 이 컴포넌트와 관계된 오류 메시지가 웹 로그에 나타나므로 그 문제점의 발생 및 수정은 비교적 쉽다. 간혹, 컴포넌트 문제가 아니라 웹 서버 자체의 설치 문제와 관계된 사항들에 의해 시스템 에러를 받기도 한다.

이러한 문제들은 디버거를 사용하여 해결하는 경향이 크다. 웹 사이트 자체를 디버깅 모드로 운영하면서 생기는 여러 결함들을 잡아 낼 것을 일반적으로 권하고 있다.

컴포넌트 오류가 아닌 경우에는 정말 어딘가의 병목이 있어서이다. 이 경우가 가장 잡기 어려운 에러이며, 보통 데이터베이스 응답 지연으로 인해 문제가 야기된다. 단순한 예로, 데이터베이스 커넥션을 열기 위한 라이선스가 충분하지 않아 문제를 야기하기도 하며, 소통을 위한 프로토콜 정보가 맞지 않아(즉 보안 프로토콜을 사용할 때), 느려지면서 서버가 죽어버리기도 한다. 이런 문제로 인해 죽는 서비스는 CPU 사용량도, 메모리 사용량도, 심지어 웬만한 변수도 다 정상이다. ASP Queue만이 증가할 뿐, 서버는 아무런 이상 증상을 보이지 않는다.

이렇게 특히 ASP 병목이 있을 때, 쉽게 그 문제를 확인하는 방법은 HTML 파일에 대해서는 응답 지연이 오지 않으면서 ASP 파일만이 응답 지연이 발생하는지 여부를 알아보는 것이 가장 빠르다. 물론 최소한 풀링으로 동작하는 서로게이트를 사용하여야 하고(가급적 독립이 좋긴 하지만, 성능상의 희생이 따르기 때문에) Inetinfo.exe 자체의 상태와 dllhost.exe의 상태를 파악하는 것이다.


DLLHOST.EXE의 과부하와 시스템 문제.

DLLHOST.EXE는 COM(+) 서로게이트를 위한 파일이다. 서로게이트란 DLL을 사용할 수 있도록 베이스 프로세스를 형성해 주는 역할 정도로 이해하면 크게 다르지 않다.

서로게이트를 이용하는 까닭은, 동시에 여러 개의 웹 서버가 운영되는 시스템에서, 하나의 가상 서버에 과부하가 걸렸을 경우, 다른 웹 서버 시스템으로 이런 문제가 전이되지 않도록 하기 위해서이다.

일반적으로, 죽는 웹 서버들 중 일부는 DLLHOST의 과부하(CPU 50%이상 독점 점유)로 인해 발생되며, 이는 서로게이트되고 있는 웹 서비스를 중지한다고 해서 회복되지 않는다. 웹 서비스 전체를 다시 시작해도 그대로 CPU를 점유하는 경우가 많으며, 대부분의 해결책은 재부팅이다.

DLLHOST의 CPU 점유 원인은 생각보다 많다. 일반적으로 ASP Requests Queue 값과 정비례하는 수가 많은데, 이 역시 두 가지 부류로 나뉘게 된다. 가령 일시적 병목 현상이 걷잡을 수 없는 상황으로 발전하는 예를 들 수 있다. 즉, 어떤 이유에서 서버가 잠시 느려진 상황에, 처리용량보다 많은 요청이 들어와서, 큐잉이 생기는 경우 점점 처리용량은 줄어들고 큐잉은 길어지는 상황이 발생하는 것이다. 최악의 경우 Server Too Busy 메시지를 끝으로 죽어버린다. 그런데, 일반적인 경우는 프로그램 외적인 측면에서 찾는 것이 좋다.

최근 DLLHOST CPU 점유율을 가장 높인 일등공신은 웜이다. 웹 사이트 프로그램을 가장하여 해당 대역을 스캔하는 악성 코드 등이 CPU 점유율을 무지막지하게 높이는 수가 많으며, 주기적인 스캔 등으로 악성 코드의 잠입을 막는 방법을 생각해 볼 수 있다. 특히 주기적으로 시스템에 부하가 걸리거나, 네트워크 모니터 결과 ARP 신호가 엄청나게 증가하고 있으면 이는 필시 웜이 동작하는 것으로 볼 수 있다.

웜이 아니라면, DLLHOST CPU 점유율이 올라가는 까닭은 서버사이드의 과중한 프로그램 부하 때문일 수 있다. 가령, 암호화/복호화를 지속적으로 반복하거나, COM(+) 기반 서버 컴포넌트가 많은 경우 이런 문제를 생각해 볼 수 있다. 굳이 이 뿐만 아니라, ASP 등의 과중한 코드 등도 이러한 문제를 야기하게 된다. 이에 대한 해결책은 의외로 간단하다. 서버를 증설하면 된다. 혹은, 비즈니스 로직을 바꾸던가 프로그램을 재설계하는 것을 권한다.

만일 풀링이나 격리 모드로 시스템을 동작시킨다면 DLLHOST의 과부하는 원격에서도 탐지할 수 있다. HTML 파일의 응답 속도는 무척 빠르지만 ASP, ActiveX Server Component 의 호출은 무척 느려지는 현상이 발생하기 때문이다.


Posted by ToTb