по оперативке в 256mb
При активной работе с коллекциями память переваливает за 256mb и приложение перезапускается
В то же время если в некоторых местах прописать GC.Collect(), то приложение магическим образом перестаёт падать
Получается, что приложение не знает, сколько ему доступно памяти и пытается использовать более 256 мегабайт, хотя вполне может уложиться в них, если будет чаще делать сборку мусора
Так вот вопрос, знает ли приложение сколько ему физически доступно памяти, и если да, то почему может быть такая ситуация, может нужно как-то вручную это прописать?
SO ведет в https://learn.microsoft.com/en-us/dotnet/api/system.gcmemoryinfo.totalavailablememorybytes
Вы там AWS Lambda изобрели? А нельзя ли просто увеличить объём памяти для этого? Ну или вообще слезть с GCP, потому что оно очень уж сомнительное
То что нужно, спасибо, гляну
https://learn.microsoft.com/en-us/dotnet/core/runtime-config/garbage-collector#heap-limit
Но оно же по умолчанию должно понимать сколько памяти есть в контейнере, я правильно понимаю? И на основании этого вызывать сборки мусора Вопрос почему оно этого не делает...
А чёрт его знает, что там Гугл показывает запущенному приложению на .NET
Посмотрел, оказалось у контейнера есть 1gb памяти Но при этом установлено ограничение в 256mb и при его превышении гугл просто перезагружает контейнер
Современный дотнет всё читает из сигруп, ничего ему устанавливать руками не надо. Я бы грешил на твои настройки в гцп (я с ним не работал)
Пройдись в дебаге и посмотри снимки озу. Найди где, когда не чистится мусор. Напрямую гк вызывать не лучшая практика
Можно ссылку где подробнее почитать что за сигрупп ?
control group это оно?
Вот за это гугловое облако и не любят. Они в гугле плевать хотели на клиентов, ни документации нормальной, ничего
Да, тебе надо чекнуть что в /sys/fs/cgroup/memory
Обсуждают сегодня