У меня есть несколько игровых серверов, работающих на Linux-серверах, и начальный объем памяти, занимаемый каждым сервером, различен.
На каждом сервере я пишу несколько журналов производительности, например, для записи состояния сервера., "Сколько стоит один цикл", "Счетчик gc за один цикл".Таким образом, при работе в режиме ожидания размер памяти медленно группируется из-за выделения строки для журнала, что приводит к генерации 0 GC .
Когда я проверяю журналы состояния по прошествии нескольких часов, я нахожучто каждый раз, когда происходит GC, время цикла увеличивается, и я думаю, что это разумно.Но что я не понимаю, так это то, что увеличение времени цикла из-за GC отличается: чем больше памяти занимает время GC, тем больше увеличивается время цикла .Как показывает журнал: «Использование памяти 600 МБ занимает всего 1 мс , чтобы выполнить один ГХ 0-го поколения, но использование памяти 2 Г занимает 15 мс .один GC 0-го поколения!
Как я знаю, Mono использует GC Generation с двумя поколениями Nursery и Major, поэтому GC 0-го поколения требуется только для обработки части кучи питомника (барьеры записитехника), и в моей ситуации детская часть должна быть того же размера, который содержит вновь выделенные строковые объектыКто-нибудь может сказать почему?
Кроме того, когда я использую GC.GetTotalMemory (false) в моно, чтобы узнать, сколько памяти использует приложение, время цикла увеличивается примерно на 7-8 мс каждый раз,Я проверил код моно, но до сих пор не понимаю, почему.