CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): belami (__커피__)
날 짜 (Date): 2002년 3월 20일 수요일 오후 01시 20분 26초
제 목(Title): Re: RAW Socket TCP/IP 예제프로그램좀요~


mp3 사이트에서 10만개 연결이 생겼다는 건 두 가지 문제가 있을 것으로 생각합니다.

1. 웹서버가 튜닝이 되지 않았다.

netstat 출력결과가 10만까지 가게 되면 연결수가 더 늘어날 수 
있도록 해주는 것이 아니라 그것을 줄여주는 튜닝을 해야 합니다.
아마 그 10만개의 엔트리가 대부분 TIME_WAIT 였을 것입니다.
TIME_WAIT 유지 시간을 기본 4분에서 -> 15초로 줄여야 하고요.
대부분의 엔트리가 FIN_XXX이라면 해킹의 대상이 되고 있다고 
볼 수도 있는데... 그렇다면 가끔씩 그런 일이 일어나지는 않겠죠.
아무튼 TIME_WAIT를 10~15초로 줄여주면 netstat 엔트리 1만개 
넘어가도록 일부러 만들려고 해도 거의 만들기 어렵습니다.
(왜냐하면 Linux 기계가 초당 1천개의 요청을 받아들이지 못하거든요)

그 10대의 mp3 서버가 혹시 소리바다처럼 짧고 매우 많은
연결을 받아들이고 있다면 TIME_WAIT의 값은 더 짧아져야 합니다.
(국내의 경우 인터넷이 매우 빠르기 때문에 
5초 정도까지도 그다지 문제는 없을 것 같습니다.)

2. DISK가 튜닝이 되지 않았다.

mp3 사이트라니까 큰 볼륨의 disk i/o가 일어나고 있을 수 있죠.
disk i/o의 활용률(iostat)을 살펴보시면 문제가 발생할 때 
i/o의 활용률이 70% 이상으로 올라가는 것을 볼 수 있을 것입니다.
disk i/o의 활용률은 30% 선에서 잡아두는 것이 최적입니다.
70%를 너무 빈번하게 넘어가게 되면 이제 disk 튜닝에 들어가야 하는데요.
mp3 사이트라니까 아마도 raid를 사용하고 있을 것 같습니다.
만일 그렇지 않다면 raid를 도입하는 것으로 문제가 해결될 수 있고요.
raid를 도입하더라도 disk 당 i/o 프로세스의 수가 4~5정도를 
넘어가면 i/o 대기 프로세스 수가 늘어납니다.
그래서 raid 볼륨당 20~50 정도의 프로세스만 i/o를 진행하게 되고
나머지는 전부 대기 상태에 있게 됩니다. (이것도 빵빵한 raid일 경우)
웹서버가 아무리 많이 떠 있어도 그 중 실제 disk에서 
뭔가를 읽으면서 일하는 놈은 (기계당) 수십 개 이상이기가 너무 어렵다는 것이죠.
요지는 disk i/o 한계를 초과하게 되면 웹서버가 갑자기 
수백~수천 개가 뜨는 일이 일어난다는 얘기입니다.

그게 상업용 사이트라면 기계당 메모리를 수십 GB 정도 더 꽂고
램디스크를 만든 후 그 쪽으로 자주 액세스 되는 mp3 파일을 옮기면 가장 좋습니다.

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.