Программа под Mono жрет в 3 раза памяти чем под .NET
От: vl690001x Россия  
Дата: 02.12.16 00:24
Оценка:
Одна и та же прога, скомпилированная при помощи VS 2015, .NET 4.5, Any CPU.
Под виндой стабильно 60 — 80 мб памяти отъедает и не растет.
В Ubuntu (Mono 4.6) — плавно растет в течение суток со 100 мегабайт до 700. Изначально росло до предела памяти, 512 мегабайт, потом убивалось. Взяли сервер на 2 гига памяти, но ведь такими темпами и 2 гига сожрет.
Что-то там растет, а что — не могу понять.
Расставил везде using, присвоил всему чему только можно null когда оно уже не надо, и GC.Collect(); результат кажется, не изменился. Как жрало так и жрет.
Я думаю, это ненормально. Может надо какой-то флаг компиляции поставить?
Re: Программа под Mono жрет в 3 раза памяти чем под .NET
От: Слава  
Дата: 02.12.16 03:50
Оценка:
Здравствуйте, vl690001x, Вы писали:

V>Одна и та же прога, скомпилированна

Может, сдампить процесс, и попробовать дамп разобрать чем-то?

PS: вот именно за это Mono и не любят.
Re: Программа под Mono жрет в 3 раза памяти чем под .NET
От: Kolesiki  
Дата: 02.12.16 06:53
Оценка: +1
Здравствуйте, vl690001x, Вы писали:

V>Одна и та же прога, скомпилированная при помощи VS 2015, .NET 4.5, Any CPU.

V>Под виндой стабильно 60 — 80 мб памяти отъедает и не растет.

Думаю, это решающий момент. Значит Моно где-то профукивает память! А под .NET Core — то же самое?
Re[2]: Программа под Mono жрет в 3 раза памяти чем под .NET
От: vl690001x Россия  
Дата: 02.12.16 07:46
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Здравствуйте, vl690001x, Вы писали:


V>>Одна и та же прога, скомпилированная при помощи VS 2015, .NET 4.5, Any CPU.

V>>Под виндой стабильно 60 — 80 мб памяти отъедает и не растет.

K>Думаю, это решающий момент. Значит Моно где-то профукивает память! А под .NET Core — то же самое?



Под .NET Core не получится запустить, много слишком того чего в нем нет. Например, System.Web.
Re[2]: Программа под Mono жрет в 3 раза памяти чем под .NET
От: vl690001x Россия  
Дата: 02.12.16 07:47
Оценка:
Здравствуйте, Слава, Вы писали:

С>Здравствуйте, vl690001x, Вы писали:


V>>Одна и та же прога, скомпилированна

С>Может, сдампить процесс, и попробовать дамп разобрать чем-то?

Не настолько я маньяк)
Re: Программа под Mono жрет в 3 раза памяти чем под .NET
От: mDmitriy Россия  
Дата: 02.12.16 08:21
Оценка:
Здравствуйте, vl690001x, Вы писали:

V>Одна и та же прога, скомпилированная при помощи VS 2015, .NET 4.5, Any CPU.

V>Под виндой стабильно 60 — 80 мб памяти отъедает и не растет.
V>В Ubuntu (Mono 4.6) — плавно растет в течение суток со 100 мегабайт до 700. Изначально росло до предела памяти, 512 мегабайт, потом убивалось.
При запуске из-под студии (2015 upd 3, NET 4.5) с дебагом иногда такая же фигня: при норме 1 гиг приложение начинает стремительно отъедать память, пока не сожрет всю (все свободные 12)
Перебилдинг всего иногда помогает, иногда нет
Причины данного явления не ясны, но Diagnostic Tools при этом всегда не работает
Re[2]: Программа под Mono жрет в 3 раза памяти чем под .NET
От: vl690001x Россия  
Дата: 02.12.16 08:43
Оценка:
Здравствуйте, mDmitriy, Вы писали:

D>Здравствуйте, vl690001x, Вы писали:


V>>Одна и та же прога, скомпилированная при помощи VS 2015, .NET 4.5, Any CPU.

V>>Под виндой стабильно 60 — 80 мб памяти отъедает и не растет.
V>>В Ubuntu (Mono 4.6) — плавно растет в течение суток со 100 мегабайт до 700. Изначально росло до предела памяти, 512 мегабайт, потом убивалось.
D>При запуске из-под студии (2015 upd 3, NET 4.5) с дебагом иногда такая же фигня: при норме 1 гиг приложение начинает стремительно отъедать память, пока не сожрет всю (все свободные 12)
D>Перебилдинг всего иногда помогает, иногда нет
D>Причины данного явления не ясны, но Diagnostic Tools при этом всегда не работает

Я релизную версию под Monо запускаю.
Но вообще, такого же не может быть в норме? Может какой-то есть компилятор или параметры компиляции специально под Mono?

Потому что, во-первых, программа сразу со старта начинает есть больше памяти примерно в 2 раза, не совсем понятно с чем это свзязано, но возможно с тем что как-то неэкономно хранятся строки (много списков со строками), и постояно память растет.
Не может же такого быть, или где-то у меня ошибка в программе, которую почему-то .net прощает, а mono — нет, или программа не оптимизировано под mono или утечка памяти.

Интересно, а можно ли консольный проект VS2015 скопилировать именно компилятором Mono?
Re: Программа под Mono жрет в 3 раза памяти чем под .NET
От: Danchik Украина  
Дата: 02.12.16 11:15
Оценка:
Здравствуйте, vl690001x, Вы писали:

V>Одна и та же прога, скомпилированная при помощи VS 2015, .NET 4.5, Any CPU.

V>Под виндой стабильно 60 — 80 мб памяти отъедает и не растет.
V>В Ubuntu (Mono 4.6) — плавно растет в течение суток со 100 мегабайт до 700. Изначально росло до предела памяти, 512 мегабайт, потом убивалось. Взяли сервер на 2 гига памяти, но ведь такими темпами и 2 гига сожрет.
V>Что-то там растет, а что — не могу понять.
V>Расставил везде using, присвоил всему чему только можно null когда оно уже не надо, и GC.Collect(); результат кажется, не изменился. Как жрало так и жрет.
V>Я думаю, это ненормально. Может надо какой-то флаг компиляции поставить?

Может разница в том какой режим используется, 32-х или 64-х битный? В 64-х битном существенно больше памяти идет.
Re[2]: Программа под Mono жрет в 3 раза памяти чем под .NET
От: vl690001x Россия  
Дата: 02.12.16 11:35
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Может разница в том какой режим используется, 32-х или 64-х битный? В 64-х битном существенно больше памяти идет.


Any CPU.
B Windows и Linux — 64битные.
Re: Программа под Mono жрет в 3 раза памяти чем под .NET
От: turbocode  
Дата: 02.12.16 14:14
Оценка:
Здравствуйте, vl690001x, Вы писали:

V>В Ubuntu (Mono 4.6) — плавно растет в течение суток со 100 мегабайт до 700. Изначально росло до предела памяти, 512 мегабайт, потом убивалось. Взяли сервер на 2 гига памяти, но ведь такими темпами и 2 гига сожрет.


Без CLR Profiler сложно сказать.
Re: Программа под Mono жрет в 3 раза памяти чем под .NET
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.12.16 22:07
Оценка: 3 (1)
Здравствуйте, vl690001x, Вы писали:

У Моно совершенно другой сборщик. Разумеется, в нем могут быть баги. Что тебе нужно сделать:
1) У моны два разных сборщика, консервативный и sgen. Надо попробовать переключить и поглядеть — осталась ли утечка.
2) Дальше ничего не поделаешь — придется моновскими тулами смотреть что в памяти подвисло. Если тебе повезет — там будет какой то один класс засирать память, так что ты сможешь написать багрепорт и попробовать придумать workaround
3) Ну а если не повезло и срется кучей разных классов — тогда как то связываться с ребятами, ковыряющими сборщик и предоставлять им воспроизводящий проблему код.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: Программа под Mono жрет в 3 раза памяти чем под .NET
От: vl690001x Россия  
Дата: 03.12.16 00:37
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, vl690001x, Вы писали:


AVK>1) У моны два разных сборщика, консервативный и sgen. Надо попробовать переключить и поглядеть — осталась ли утечка.


Это интересно.
А как переключиться?)
Re[3]: Программа под Mono жрет в 3 раза памяти чем под .NET
От: _NN_ www.nemerleweb.com
Дата: 03.12.16 11:28
Оценка:
Здравствуйте, vl690001x, Вы писали:

V>Здравствуйте, AndrewVK, Вы писали:


AVK>>Здравствуйте, vl690001x, Вы писали:


AVK>>1) У моны два разных сборщика, консервативный и sgen. Надо попробовать переключить и поглядеть — осталась ли утечка.


V>Это интересно.

V>А как переключиться?)

http://docs.go-mono.com/?link=man%3amono(1)
--gc=boehm, --gc=sgen

Можно посмотреть MONO_GC_DEBUG для отладки сборщика мусора.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Программа под Mono жрет в 3 раза памяти чем под .NET
От: hardcase Пират http://nemerle.org
Дата: 04.12.16 18:24
Оценка: +1
Здравствуйте, vl690001x, Вы писали:

V>Одна и та же прога, скомпилированная при помощи VS 2015, .NET 4.5, Any CPU.

V>Под виндой стабильно 60 — 80 мб памяти отъедает и не растет.
V>В Ubuntu (Mono 4.6) — плавно растет в течение суток со 100 мегабайт до 700.

Я бы вот так сразу остерегся пенять на сборщика мусора. Проблема вполне может быть в отличии реализации каких-то System.* классов у самого Mono.
/* иЗвиНите зА неРовнЫй поЧерК */
Отредактировано 04.12.2016 18:25 hardcase . Предыдущая версия .
Re: Программа под Mono жрет в 3 раза памяти чем под .NET
От: VladCore  
Дата: 04.12.16 22:21
Оценка:
Здравствуйте, vl690001x, Вы писали:

1.
кроме двух реализаций GC про которые написали выше, есть ещё опция mono --desktop ....

--desktop
Configures the virtual machine to be better suited for desktop applications. Currently this sets the GC system to avoid expanding the heap as much as possible at the
expense of slowing down garbage collection a bit.


2.
А MemoryCache или HttpRuntime.Cache используются ли, если не секрет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.