Утечка памяти
От: Аноним  
Дата: 10.12.13 12:31
Оценка: -1
Всем доброго!
Была некая прога, ещё из под Visual Studio 6.0 C++, мигрировал всё это дело на Visual Studio 2012...
Отлично работает под Windows7 x86 и Windows 8 x64, но после того как я её выложил на сервер Windows 2012 R2 x64 началась башенная утечка памяти! За несколько дне до 1гига... Кто сталкивался? Разъясните!!! Может в настройках какие-то дополнительные атрибуты выставить?
Re: Утечка памяти
От: Sni4ok  
Дата: 10.12.13 13:03
Оценка: -3 :)
Здравствуйте, Аноним, Вы писали:

А>Кто сталкивался? Разъясните!!!


плохие программисты, пишут плохой софт- и вот возможный результат,
чтобы устранить эту утечку попробуйте переписать всё на ява/c#/php/python по вкусу.
Re[2]: Утечка памяти
От: Pzz Россия https://github.com/alexpevzner
Дата: 10.12.13 13:20
Оценка: +2
Здравствуйте, Sni4ok, Вы писали:

S>чтобы устранить эту утечку попробуйте переписать всё на ява/c#/php/python по вкусу.


На любом из этих языков можно организовать утечку памяти.
Re[3]: Утечка памяти
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 10.12.13 14:14
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>На любом из этих языков можно организовать утечку памяти.

Хмм. Приведи утечку памяти, а не ресурса на Java.
Sic luceat lux!
Re[4]: Утечка памяти
От: Abyx Россия  
Дата: 10.12.13 15:18
Оценка:
Здравствуйте, Kernan, Вы писали:

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


Pzz>>На любом из этих языков можно организовать утечку памяти.

K>Хмм. Приведи утечку памяти, а не ресурса на Java.

1) память это ресурс.
2) выдели память системной функцией типа VirtualAlloc — получишь утечку.
In Zen We Trust
Re[5]: Утечка памяти
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 10.12.13 15:28
Оценка:
Здравствуйте, Abyx, Вы писали:

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


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


Pzz>>>На любом из этих языков можно организовать утечку памяти.

K>>Хмм. Приведи утечку памяти, а не ресурса на Java.

A>1) память это ресурс.

Это понятно. Я имел вииду какой-нибудь файл или соединение с базой...
A>2) выдели память системной функцией типа VirtualAlloc — получишь утечку.
Где такое в Джава?
Sic luceat lux!
Re: Утечка памяти
От: Pavel Dvorkin Россия  
Дата: 10.12.13 15:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Всем доброго!

А>Была некая прога, ещё из под Visual Studio 6.0 C++, мигрировал всё это дело на Visual Studio 2012...
А>Отлично работает под Windows7 x86 и Windows 8 x64, но после того как я её выложил на сервер Windows 2012 R2 x64 началась башенная утечка памяти! За несколько дне до 1гига...

1. 1 Гиг — какой именно счетчик и где его брал ?
2. Проверялась ли работа программы под Windows 7 в течение нескольких дней ? Если нет, то почему уверен, что там нет утечки памяти ?

Никакие настройки тут не помогут. Надо искать утечки памяти в программе, судя по всему, там просто не освобождается выделяемая память.
With best regards
Pavel Dvorkin
Re[4]: Утечка памяти
От: MTD https://github.com/mtrempoltsev
Дата: 10.12.13 16:54
Оценка: +1
Здравствуйте, Kernan, Вы писали:

K>Хмм. Приведи утечку памяти, а не ресурса на Java.


Элементарно — сделали временный объект, например, буффер членом класса. Или был объект членом класса, рефакторили, рефакторили, объект стал не нужен в классе, а удалить забыли.

Вот еще хороший пример
Автор: Ikemefula
Дата: 28.11.13


Кроме того, когда у тебя приложение перестанет работать из-за того, что коннекшены к базе утекли, а не память, тебе от осознания этого легче не станет.
Re[6]: Утечка памяти
От: Abyx Россия  
Дата: 10.12.13 17:19
Оценка:
Здравствуйте, Kernan, Вы писали:

A>>2) выдели память системной функцией типа VirtualAlloc — получишь утечку.

K>Где такое в Джава?

а... если в джаве нельзя вызывать C API, то наверное нигде.
In Zen We Trust
Re[4]: Утечка памяти
От: Evgeny.Panasyuk Россия  
Дата: 10.12.13 18:23
Оценка:
Здравствуйте, Kernan, Вы писали:

Pzz>>На любом из этих языков можно организовать утечку памяти.

K>Хмм. Приведи утечку памяти, а не ресурса на Java.

Элементарно — подписка на событие которое не происходит, где handler держит ссылки на объекты. Другой вариант — положи что-нибудь в static переменную, и забудь вовремя отчистить.
Re[4]: Утечка памяти
От: Шахтер Интернет  
Дата: 10.12.13 19:51
Оценка: +2
Здравствуйте, Kernan, Вы писали:

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


Pzz>>На любом из этих языков можно организовать утечку памяти.

K>Хмм. Приведи утечку памяти, а не ресурса на Java.

Забыл занулить ссылку. Забыл удалить из списка объект, который больше не нужен. По факту, в Java/С# утечку памяти организовать ещё проще, чем в С++. Потому что в С++
ты гарантировано убиваешь динамический объект вызовом delete, а в управляемых языках ты должен прибить все ссылки на объект.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re: Утечка памяти
От: Lepsik Индия figvam.ca
Дата: 10.12.13 21:53
Оценка:
до 1гига... Кто сталкивался? Разъясните!!! Может в настройках какие-то дополнительные атрибуты выставить?

пишите unit test-ы — очень помогает
Re[5]: Утечка памяти
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 11.12.13 08:28
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>ты гарантировано убиваешь динамический объект вызовом delete,

Вот не факт. Например, можно вызвать delete вместо delete[] (в 99). Но это к слову.
Ш>а в управляемых языках ты должен прибить все ссылки на объект.
Ну ты мне говоришь это с такой интонацией как будто я этого не знаю. Тезис был про утечку памяти. В моём понимании классическая утечка это именно С/C++-шная утечка памяти. То, что в джава течёт из-за забытых в тоннах говнокода ресурсах типа коннекшена к б/д или почивших в дедлоке ссылкок я в курсе.
Sic luceat lux!
Re: Утечка памяти
От: Кодт Россия  
Дата: 11.12.13 09:39
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

А>Может в настройках какие-то дополнительные атрибуты выставить?


Программирование — это магия. Чтобы избавиться от бага, нужно в настройках волшебные атрибуты выставить, и дальше оно само!

Нужно смотреть, в чём разница между окружениями программы.

Может, на девелоперской тачке есть файлик tiny.txt размером 3 байта, а на сервере этот же файлик — 100-метровый. Десять раз загрузили его — вот и будет 30 байт против гектара.

Может, у программы есть мега-пул, который очищается при достижении определённого процента от количества доступной памяти. На девелоперской тачке это происходит раз в час, а на сервере — раз в неделю.
Кстати, запросто! Сильно фрагментированная куча. Менеджер кучи хапает и хапает страницы, формально они уже свободны, но он их держит про запас.

Может, какой-нибудь конфиг на девелоперской тачке содержит нормальные данные, а на сервере — мусор, к которому программа не готова. Или не мусор, а боевые значения, к которым программа не готова (например, ловит целочисленное переполнение и вместо 10 байтов выделяет 2**32+10, а потом освобождает только 10).


Слабо поставить на сервер дебажную сборку и удалённо поотлаживть?
Перекуём баги на фичи!
Re[2]: Утечка памяти
От: Vzhyk  
Дата: 11.12.13 09:50
Оценка:
12/11/2013 12:39 PM, Кодт пишет:

> Программирование — это магия. Чтобы избавиться от бага, нужно в

> настройках волшебные атрибуты выставить, и дальше оно само!
+100500

> Слабо поставить на сервер дебажную сборку и удалённо поотлаживть?

Вообще-то это плохое решение. Это крайняя ситуация.
А так надо искать баги в программе, искать где и что утекает и когда и
почему и фиксить.
Да и в дебаге у него может не течь, а течь в релизе.
Posted via RSDN NNTP Server 2.1 beta
Re: Утечка памяти
От: ronik  
Дата: 11.12.13 12:07
Оценка:
Я вам больше скажу, таких проги две (я имею ввиду которые мигрировали), и обе жрут как кони именно на винде 2012 х64... после примерно 1гига проги падают...
Re[2]: Утечка памяти
От: Vzhyk  
Дата: 11.12.13 12:19
Оценка:
12/11/2013 3:07 PM, ronik пишет:

> Я вам больше скажу, таких проги две (я имею ввиду которые мигрировали),

> и обе жрут как кони именно на винде 2012 х64... после примерно 1гига
> проги падают...
В них баги. Это все, что можно тебе ответить и чем можно тебе помочь при
имеющемся объеме информации.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Утечка памяти
От: ronik  
Дата: 11.12.13 17:08
Оценка:
Здравствуйте, Vzhyk, Вы писали:
Спасибо! Усё понял, будем лечиться...
V>12/11/2013 3:07 PM, ronik пишет:

>> Я вам больше скажу, таких проги две (я имею ввиду которые мигрировали),

>> и обе жрут как кони именно на винде 2012 х64... после примерно 1гига
>> проги падают...
V>В них баги. Это все, что можно тебе ответить и чем можно тебе помочь при
V>имеющемся объеме информации.
Re[3]: Утечка памяти
От: ronik  
Дата: 11.12.13 17:10
Оценка:
Здравствуйте, Vzhyk, Вы писали:
Спасибо! Усё понял, будем лечиться!!!
V>12/11/2013 3:07 PM, ronik пишет:

>> Я вам больше скажу, таких проги две (я имею ввиду которые мигрировали),

>> и обе жрут как кони именно на винде 2012 х64... после примерно 1гига
>> проги падают...
V>В них баги. Это все, что можно тебе ответить и чем можно тебе помочь при
V>имеющемся объеме информации.
Re[6]: Утечка памяти
От: robin_of_the_wood Россия  
Дата: 11.12.13 17:26
Оценка: -2
Здравствуйте, Kernan, Вы писали:

Ш>>а в управляемых языках ты должен прибить все ссылки на объект.

K>Ну ты мне говоришь это с такой интонацией как будто я этого не знаю. Тезис был про утечку памяти. В моём понимании классическая утечка это именно С/C++-шная утечка памяти. То, что в джава течёт из-за забытых в тоннах говнокода ресурсах типа коннекшена к б/д или почивших в дедлоке ссылкок я в курсе.

Ну утечка это прежде всего нарушение баланса между выделением и освобождением.
Термин "классическая утечка" ни разу не встречал, но не вижу никакой разницы между забытым вызовом деструктора и забытым удалением ненужного обьекта из коллекции с временем жизни совпадающим с временем жизни всего приложения.
Если на С++ организовать подсчет ссылок или даже GC для определенных типов, а другие типы просто не использовать, то утечки останутся утечками.
Просто они будут возникать по причине невыполнения действий, отличных от вызова delete или деструктора
Проектирование велосипедов для слепых жирафов
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.