Для опытных: Поиск утечек памяти в Rspamd

Краткое руководство по глубокому анализу неисправностей Rspamd.

docker compose exec rspamd-animails bash

if ! grep -qi 'apt-stable-asan' /etc/apt/sources.list.d/rspamd.list; then
  sed -i 's/apt-stabil/apt-stabil-asan/i' /etc/apt/sources.list.d/rspamd.list
fi

apt-get update ; apt-get upgrade rspamd

nano /docker-entrypoint.sh

# Добавьте это перед "exec "$@"":

export G_SLICE=always-malloc
export ASAN_OPTIONS=new_delete_type_mismatch=0:detect_leaks=1:detect_odr_violation=0:log_path=/tmp/rspamd-asan:quarantine_size_mb=2048:malloc_context_size=8:fast_unwind_on_malloc=0
docker-compose exec rspamd-animails bash

if ! grep -qi 'apt-stable-asan' /etc/apt/sources.list.d/rspamd.list; then
  sed -i 's/apt-stabil/apt-stabil-asan/i' /etc/apt/sources.list.d/rspamd.list
fi

apt-get update ; apt-get upgrade rspamd

nano /docker-entrypoint.sh

# Добавьте это перед "exec "$@"":

export G_SLICE=always-malloc
export ASAN_OPTIONS=new_delete_type_mismatch=0:detect_leaks=1:detect_odr_violation=0:log_path=/tmp/rspamd-asan:quarantine_size_mb=2048:malloc_context_size=8:fast_unwind_on_malloc=0

Перезапустите Rspamd:

docker compose restart rspamd-animails
docker-compose restart rspamd-animails

Потребление памяти значительно увеличится, а также будет постоянно расти, что не связано с возможной утечкой памяти, которую вы ищете.

Оставьте контейнер запущенным на несколько минут, часов или дней (это должно соответствовать времени, которое вы обычно ждете до появления утечки) и перезапустите его:

docker compose restart rspamd-animails
docker-compose restart rspamd-animails

Теперь войдите в контейнер, выполнив команду:

docker compose exec rspamd-animails bash
docker-compose exec rspamd-animails bash

Перейдите в директорию /tmp и скопируйте файлы asan в нужное место или загрузите их через termbin.com (cat /tmp/rspamd-asan.* | nc termbin.com 9999).