Tor 중계기에서 예상한 것보다 더 많은 메모리를 사용할 경우, 그 점유하는 양을 줄이기 위해 다음과 같은 방법을 써볼 수 있어요:
- Linux 사용자라면, glibc에서 malloc의 실행(implementation) 중 메모리 파편화(memory fragmentation)버그가 발생할 수 있어요.
이때 메모리 파편화란, Tor가 시스템에 메모리를 보낼 때, 메모리 조각이 파편화돼 재사용이 어렵게 되는 현상을 말해요.
Tor의 tar 파일(tarball)엔 OpenBSD의 malloc implementation이 기본적으로 포함돼있어요. 파편화 버그가 glibc 대비 많지 않아요(그 반대급부로 CPU 부하량이 높어요).
OpenBSD 에서의 'malloc implementation'을 glibc 대신 사용하도록 Tor를 설정할 수 있어요:
./configure --enable-openbsd-malloc
.
- 운영하는 중계기의 속도가 빠를 경우, 즉 TLS 접속을 많이 개방(open)해둘 수 있다면, OpenSSL's internal buffer로 인해 많은 메모리를 잃을 수 있어요(소켓 당 38KB 이상).
Tor 프로젝트에선 OpenSSL 방식에서 미사용 버퍼의 메모리를 더 적극적으로 방출하도록 패치를 진행했어요.
OpenSSL의 버전을 1.0.0 이상으로 업데이트하면, Tor의 빌드 프로세스에서 자동적으로 이를 감지해 패치된 기능을 활성화해요.
- 위와 같은 조처에도 불구하고 메모리 부하 관련 문제를 해결할 수 없다면, 중계기의 공시 대역폭량을 줄이세요.
대역폭의 공시량이 적을 수록, 다른 사용자들의 유입량이 적어집니다. 따라서 중계기의 성장세가 꺽이게 돼요.
매뉴얼 페이지에 기재된
MaxAdvertisedBandwidth
옵션 항목을 참고하세요.
앞서 말씀드린 바와 같이, Tor 중계기는 많은 램을 사용해요. 그러나 아무리 빠른 출구 중계기라 하더라도 메모리 사용량이 500-1000 MB인 것은 흔하지 않아요.