Из-за чего не сохраняется снапшот?
Ссылка скопирована
По вводным: есть приложение с явной утечкой памяти на.Net 8. Пытаюсь сделать снапшот через Jetbrains dotMemory.
Сейчас ситуация такая: после вывода [PID:1] SNAPSHOT #1 READY. Как будто бы dotMemory зависает и ни чего не сохраняет.
docker exec -it app /dotMemory/dotmemory get-snapshot 1 --save-to-dir=/dotMemory/snapshots Performs memory profiling of .NET applications Found 1 process(es): [1] app Attaching to [1] app runtime... Profiler connected. PID:1, Core CLR runtime v8.0.18.0 ATTACHED. Getting snapshot... [PID:1] Saving snapshot... ~11,86 M objects [PID:1] SNAPSHOT #1 SAVED. [PID:1] Processing snapshot #1... [PID:1] SNAPSHOT #1 READY.
Нужно решить такую задачу?
Заказать помощь
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Лучший ответ
1
Другие ответы (0)
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопроскомментарий
Вам также может быть интересно
VPN
Как правильно настроить vless для Android TV?
1 ответ
Pyrogram
Как правильно зарегистрировать юзер бота в Telegram?
1 ответ
печатные-платы
Как заставить запускаться программу M3.exe от компании Hanxing AOI в инспекционной машине на Windows 7 Pro?
1 ответ
Искусственный интеллект
Что делать, если OpenRouter ограничивает доступ к моделям?
1 ответ

Если dotMemory в Docker пишет
SNAPSHOT #1 READY, но файл не появляется, обычно проблема в одном из трёх мест: путь сохранения не существует или недоступен внутри контейнера, profiler не может корректно завершить сохранение снимка, либо контейнеру не хватает памяти/прав на запись. Сообщение READY означает, что снимок подготовлен, но не гарантирует, что он уже записан туда, куда вы ожидаете.Проверьте каталог внутри контейнера:
docker exec -it app sh ls -la /dotMemory mkdir -p /dotMemory/snapshots touch /dotMemory/snapshots/test.txt ls -la /dotMemory/snapshots
Если каталог не примонтирован наружу, файл может сохраниться внутри контейнера и исчезнуть после пересоздания. Лучше явно примонтировать volume:
services: app: volumes: - ./snapshots:/dotMemory/snapshots
Проверьте, что команда запускается от пользователя, у которого есть права писать в этот каталог. Если приложение работает не от root, права могут мешать:
docker exec -it app id docker exec -it app chmod -R 777 /dotMemory/snapshots
Также dotMemory может долго сохранять большой snapshot. Посмотрите нагрузку, свободное место и логи контейнера:
docker logs app --tail=200 docker exec -it app df -h docker stats app
Для .NET 8 в контейнере важно, чтобы profiler и runtime были совместимы, а контейнер не был слишком урезан по capabilities. Если снапшот большой, увеличьте лимит памяти контейнера и временно отключите рестарты.
Итог: сначала убедитесь, что
/dotMemory/snapshotsсуществует, доступен на запись и примонтирован наружу. Потом проверьте свободное место, права пользователя и логи. Чаще всего файл “не сохраняется” именно потому, что сохраняется внутри контейнера не туда или процесс не имеет прав.