본문

클럽박스 fscagent의 포트점유현상

정말로 오랜만에 클럽박스 다운로드가 진행중이었던 서버에 접속해보았다. 프로그램 자체가 가볍기도 하고 양질의 자료도 많아서, 클럽박스의 무료 다운로드를 애용하기 때문에 한번에 수십기가의 자료를 다운로드 큐에 올려놓는다. 그래놓고 한달후에 다시 접속해보면 다 다운로드가 되어있다. 거기에 마일리지까지 두둑하게 쌓이니 더욱 좋다. 하지만 거기에 문제가 있다면, 다운로드 받은 파일을 그리딩(여러 사용자에게 업로드)하는 fscagent.exe라는 프로세스가-완벽하지않게 설계되어선진 모르겠지만-오류를 많이 내보낸다는 점이다.

구체적인 예를 들자면, 갑자기 메모리를 엄청나게 차지한다는것과.(400MB까지 점유하던데..-_-) 이번에 알게된 사실인데, 포트를 무자비하게 점유한다는 것이다.

뭐 메모리 이상점유는 이미 널리 알려져서(물론 방화벽 설정등의 방법이 있지만 확실하다 여겨지는 대처법은 나와있진 않는다) 따로 언급할 필요는 없을 거 같다. 대신, 어느 블로거가 제시한 '플래시 오버플로우' 문제는 사실이 아니다. 근거라면, Flash 기능을 끄고서도 이런 현상이 발생했을 뿐만 아니라, 플래시를 전혀 설치하지 않은 경우에도 발생했기 때문.

이번 포트점유의 경우는 메모리 이상점유현상은 보이지 않아서 처음에는 알 수 없었다. 메모리의 경우는 일정량 이상을 점유하면 연락하도록 해놔서 금방 알 수있게해놨지만. 이번 경우에는 체감 속도가 약간 느려지고 CPU 점유율이 약간 올라간 현상뿐이었다. 대신 다른 서버서비스를 돌리다가 우연찮게 알게되었다.

서비스 도중 "An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full" (한글로는, "시스템에 버퍼 공간이 부족하거나 대기열이 가득 차서 소켓 작업을 수행할 수 없습니다.") 이라는 메시지를 보여주면서 이상작동을 하길래 조사를 해봤다.

마이크로소프트 고객지원페이지에서 "임시(ephemeral) TCP 포트의 기본 최대 값은 5000입니다."라는 메시지를 보고나서 어디서 임시포트를 다 써버렸냐-_- 하고 netstat를 해보니 이건 뭐 너무 많아서 알아볼 수 없어서 파일로 내보내서 확인 해야 할 판이었다.

확인을 해보고 원인 프로세스가 뭔지봤더니 fscagent였다.-_- 1025부터 5000(기본값)범위내의 모든 포트를 점유하고 있었다. 그래서 tcp연결하려고 하면 오류가 나서 다른 프로그램들도 안돌아갔던것!! 또한 이에 따른 클럽박스내에 문제가 있었으니, 마일리지 전송 서비스와 연결이 안되어서 마일리지도 안올라갔다는것!!

[그림 1] 프롬프트에서는 확인이 불가능하여 파일로 저장하여 확인했다...-_-;;


바로 클럽박스를 종료를 시켰는데도 facagent는 살아있고(원래는 같이 종료되는데) 해서 프로세스 강제를 시켜버렸다. 이건 뭐 성질이 뻗쳐서 원..

우선은 마소가 알려준대로 레지스트리에서 
(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters)
DWORD로 MaxUserPort를 Decimal로 10000으로하여 새로 입력해주긴 했는데..

참 이거를 근본적으로 어떻게 해결해야 할지는 모르겠다. 계속 포트 점유를 확인하는 프로그램을 만들어야 하나 아니면 이참에 방화벽을 설치할까 요즘 중국애들이 미친듯이 들어오던데. (왠만해서는 빈약한 시스템에 부담주고 싶지는 않아서 방화벽을 설치하진 않았다. 대신 서버프로그램에서 제어를 하는데, IP Deny로는 막을수가 없어서 일정 대역을 Allow 하는 방법을 사용하고 있다 -_-;;;)

댓글

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.