Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Вниз

Утечка памяти.....   Найти похожие ветки 

 
Adventure ©   (2007-08-13 11:50) [0]

Господа, у кого есть опыт отслеживания и нахождения утечки памяти в программах? Все доступные в инете компоненты  "определители" либо не хотят работать при внедрении в код либо не работают.

У меня достаточно большой проект включающий и базы данных и сетевые подключения и вот в чем проблема:

1. Раз в час (приблизительно) обьем памяти выделяемый системой для данных увеличивается в 2 раза.
2. При запуске программы может появится, а может нет ошибка "Out of Memory"

Не могу понять. Весть текст перепроверил сто раз ...


 
Сергей М. ©   (2007-08-13 11:58) [1]


> Весть текст перепроверил сто раз


Проверь 101-й раз. Но теперь с использованием отладчика.


 
Adventure ©   (2007-08-13 12:00) [2]


> Проверь 101-й раз. Но теперь с использованием отладчика.

С отладчиком очень сложно. Программа многопоточная. До 30 разных Thread запускается постоянно.


 
Сергей М. ©   (2007-08-13 12:04) [3]


> С отладчиком очень сложно


А без отладчика никак, хочешь ты того или не хочешь.


> многопоточная


И что ?
Отладчик успешно справляется с этим..


 
sniknik ©   (2007-08-13 12:05) [4]

> 2. При запуске программы может появится, а может нет ошибка "Out of Memory"
используется BDE?
гдето 8-13 незакрытых сессий в нем приводит к этой ошибке. можеш проверить, сделай минимальное приложение 1 форма и одна открытая таблица (TTable) на ней, после компиляции запусти получившуюся прогу 14 раз. удалось? сообщение похоже?
если это то, то это както регулируется в настройках BDE, т.е. можно увеличить количество, но я не знаю как (и не стремлюсь узнать, т.к. не пользуюсь).

+ еще вроде похожую (если не туже самую) ошибку дает одновременное использование BDE и Jet в определенных условиях. лень описывать. давай больше исходной инфы, может узнает кто ситуацию.


 
sniknik ©   (2007-08-13 12:06) [5]

> Программа многопоточная. До 30 разных Thread запускается постоянно.
и в каждом работа с базой? ... ну вот, точно BDE.


 
Adventure ©   (2007-08-13 12:19) [6]


> используется BDE?

Да. BDE (Paradox базы)
Не нашел пока альтернативы (конкретно к этой задаче)
При запуске программы часть таблиц удаляется и создаются новые, проверяется корректность таблиц (открытие в try except), "плохие" создаются заново.

Затем одна таблица начинает заполнятся из интернета данными (до 1000 записей враз с проверкой, корректировкой,редактированием, автоподстановками из других таблиц и все в потоках. Вот в этот момент и появляется (или нет) сообщение "Out Of Memory".
Во время работы (сутки - двое) это сообщение появляет (или нет) эпизодически.


 
Adventure ©   (2007-08-13 12:45) [7]


> то это както регулируется в настройках BDE


Сделал изменения в настройках..... Пока работает. Посмотрим, что будет.

А вот, что с утечкой делать?


 
Сергей М. ©   (2007-08-13 12:51) [8]


> что с утечкой делать?


Привел бы ты хоть какой-либо код из состава своего проекта ..

Ну, скажем, код ответственный за "таблица начинает заполнятся из интернета данными" ..


 
jack128_   (2007-08-13 13:05) [9]


> Отладчик успешно справляется с этим..

нет, как раз при многопоточной отладке IDE глючит весьма и весьма. Обычно это проявляется в банальном зависании Дельфи..

---

> Adventure ©  

А FastMem - совсем не помогает??


 
Сергей М. ©   (2007-08-13 13:08) [10]


> при многопоточной отладке IDE глючит весьма и весьма


У меня ничего не "глючит" и не "зависает".
А если что-то и происходит непонятное, то это для отладки как правило непринципиально.


 
Adventure ©   (2007-08-13 13:31) [11]

Пока беру тайм аут.
После изменения настроек BDE пропала (пока) утечка.....


 
DVM ©   (2007-08-13 13:43) [12]


> Все доступные в инете компоненты  "определители" либо не
> хотят работать при внедрении в код либо не работают.

MemProof пробовал?


 
Adventure ©   (2007-08-14 16:19) [13]


> MemProof пробовал?
>

Пробую... И вот какая штука.
Обнаружилось аварийное завершение какого-то потока.
Под отладчиком - тишина, а это програмулина выдет, что:

Exception 0EEDFADE Unknown exception at 7C4EA4E1

Как найти это место в исходнике ?

Я понимаю, что вопрос может и для начинающих, но не могу сообразить.


 
sniknik ©   (2007-08-14 16:55) [14]

> Exception 0EEDFADE Unknown exception at 7C4EA4E1
> Как найти это место в исходнике ?
выделенное и есть указание "адреса", под отладчиком выполни пункт меню "Find Error..." и набери указанные цифры.


 
Сергей М. ©   (2007-08-15 09:23) [15]


> Обнаружилось аварийное завершение какого-то потока


> Как найти это место в исходнике ?


Прежде чем его искать (а ты его заведомо не найдешь с пом. Search -> Find Error), сделай общую обработку непредвиденных исключений в потоках с протоколированием.

procedure TSomeThread.Execute;
begin
 try
  ...
 execute
   on e:exception do
     WriteToLog("Thread " + IntToStr(ThreadId) + ", exception class " + e.ClassName + #10#13 + e.Message);
 end;
end;


 
Rouse_ ©   (2007-08-15 10:26) [16]

0EEDFADE? Старая ошибка. Оперативы добавь... наш комплекс на слабых тачках тоже с этой ошибкой падает, всегда добавление оперативки выручало...


 
Rouse_ ©   (2007-08-15 10:28) [17]

Обычно при выпадении 0EEDFADE если выполнить GlobalMemoryStatus то результат будет примерно такой:

Статистика использования памяти:
- Процент занятой физической памяти: 52%
- Объем физической памяти: 255 Мб
- Свободно физической памяти: 32 Мб
- Объем файла подкачки: 1794 Мб
- Свободное место в файле подкачки: 1732 Мб


 
Adventure ©   (2007-08-16 13:57) [18]

Господа, всем огромнейшее спасибо!

Все оказалось проще.
Я купил в интернете один готовый модуль (в исходниках) для своего проекта и естественно, так как это "продажный" вариант даже не рассматривал его на ошибки. А все оказалось в нем!!! Ни один динамический массив выделяемый через SetLength не освобождался, кроме того не было проверки на ошибочные данные и в непредвиденных ситуациях выделялся по Setlength обьем превышающий всю оперативку.

Еще раз спасибо всем и ... пишите проги сами.


 
Сергей М. ©   (2007-08-16 14:16) [19]


> Ни один динамический массив выделяемый через SetLength не
> освобождался


С чего ты так в этом уверен ?


> выделялся по Setlength обьем превышающий всю оперативку


Причем здесь "оперативка" ?

Менеджер памяти, к которому обращается все та же SetLength() и иже с ней функции, запрашивающие распределение/перераспределение/освобождение памяти, не оперирует оперативной памятью - вся работа идет с виртуальной памятью процесса.


 
Adventure ©   (2007-08-16 14:19) [20]


> С чего ты так в этом уверен ?


Уверен, потому, что все перепроверил и исправил. Все работает "как часы"


 
Сергей М. ©   (2007-08-16 14:23) [21]


> все перепроверил и исправил


Малацца)

Хотелось бы еще при этом верить, что о времени жизни переменных и переменных с управляемым временем жизни ты знаешь не понаслышке.


 
Adventure ©   (2007-08-16 14:30) [22]

:-)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.042 c
2-1191920909
Tron
2007-10-09 13:08
2007.10.28
Как подключить сетевой принтер?


15-1191409720
PPop
2007-10-03 15:08
2007.10.28
Ну как указать этот Main-Class в файле manifest.mf?


11-1164116139
Psychedelic
2006-11-21 16:35
2007.10.28
Прозрачный Tab


3-1181823543
GhosTer
2007-06-14 16:19
2007.10.28
Как подключиться к базе данных Active Directory!


2-1191236054
sydenis
2007-10-01 14:54
2007.10.28
неявное связывание с bpl





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский