2012-03-06 3 views
3

Linux (Erlang R14B 03)에서 ejabberd 2.1.10 서버를 실행 중입니다. 일괄 처리 도구를 사용하여 XMPP 연결을 만들고 메시지를 임의로 보내는 중입니다. ejabberd는 대부분의 연결을 허용합니다. 연결이 지속적으로 증가하더라도, erlang : memory (total) 값은 범위와 함께 있음이 관찰됩니다.
하지만 위 명령을 사용하여 ejabberd 프로세스의 메모리 사용량을 확인하면 ejabberd 프로세스의 메모리 사용이 지속적으로 증가하고 있음을 알 수 있습니다.ejabberd : erlang과 Linux 프로세스 간의 메모리 차이점

erlang : memory (total) 값과 top 명령으로 표시되는 메모리 사용량의 차이가 지속적으로 증가하고 있음을 알 수 있습니다.

표시되는 메모리의 차이에 대한 이유를 알려주십시오. 메모리 누수가 원인입니까? 어쨌든이 문제를 디버깅 할 수 있습니까? 메모리 누수가 아닌 경우 추가 메모리 (erlang & top 명령의 차이점)가 사용됩니까?

답변

2

Erlang VM 자체 또는 ejabberd의 Erlang이 아닌 부분의 메모리 누수가 설명하는 효과를 나타냅니다. ejabberd에는 일부 NIF가 포함되어 있습니다. ejabberd-2.1.10에는 10 개의 ".c"파일이 있습니다.

ejabberd를 "- enable-nif"로 구성 했습니까? 그렇다면 "--disable-nif"를 사용하여 빌드 된 버전과 비교하여 다른 메모리 사용 동작이 있는지 확인하십시오.

디버깅을위한 다른 가능성으로는 Valgrind를 사용하여 누출을 탐지하고 찾아내는 것입니다. (Erlang VM에서 사용하려고 시도하지는 않았지만 몇 가지 위양성이있을 수 있지만 행운과 함께 누수가 크기 나 소스별로 두드러집니다.)

마지막 참고 사항 : Erlang 프로세스의 힙이 조각화되었을 수 있습니다. 할당 사이의 간격은 OS 프로세스 크기에 포함됩니다. 그들은 erlang : memory (total)에 포함 된 것처럼 보이지 않습니다.

관련 문제