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인 것은 흔하지 않습니다.