|
|
|
Утечка памяти на многопроцессорной машине
|
|||
|---|---|---|---|
|
#18+
Всем привет! Есть проблема с значительной утечкой памяти на многопроцессорном компе. Попробую точно ее сформулировать. Аппликация довольно сложная: часть СОМ dll написана на VC++6(ATL), часть на VB6. Statless компоненты установлены в COM+. Основная логика написна на C++ с использованием STL. Есть один объект singelton(хранит state). Один из "сишных" объектов передает сам себя между VB объектами. Для этого испoльзовуется GIT(марашалинг). Аппликация поддерживает одновременно большое количество юзеров(в зависимости от железа). Проблемы с памятью начинаются, когда на компе больше одного процессора. Прогоняю последовательно 1000 тестoвых итераций с одним юзером - нет проблем. Прогоняю одновременно 4 юзера по 250 итераций - вижу, как постоянно растет используемая память моего процесса(dllhost.exe) и в конечном итоге устанавливается намного выше, чем в предыдущем тесте и не опускается, естественно, после окончания теста. С одним процессором оба результата одинаковы - нет утечки. Все(я надеюсь :) ) "простые" места утечки памяти нашел с помощью(и без нее)BoundChecker6.5. Извиняюсь за долгий рассказ, но может кто-то сталкивался с подобной проблемой или подскажет в каком направлении ee искать? Заранее спасибо. Евгений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 13:11 |
|
||
|
Утечка памяти на многопроцессорной машине
|
|||
|---|---|---|---|
|
#18+
Т.е. BoundChecker утечки не показывает ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 13:34 |
|
||
|
Утечка памяти на многопроцессорной машине
|
|||
|---|---|---|---|
|
#18+
если разница всего лишь в 10-20%, и при повторных запусках тестов (или при изменении продолжительности тестов) не растет, то, похоже, нет утечки памяти, а есть большая дефрагментация кучи. Попробуй сам поуправлять памятью (например, блочным методом, т.е. объединять куски памяти в пулы, отвечающие за выделение кусков памяти одного размера). Поищи готовые аллокаторы для STL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 14:24 |
|
||
|
Утечка памяти на многопроцессорной машине
|
|||
|---|---|---|---|
|
#18+
1. BoundChecker не то что бы показывает НОЛЬ утечки памяти, а показывает на те места, где ну совершенно не может быть утечки, например в десяти объектах используется _bstr_t m_Name = _T("ddd"). В девяти случаях он (BC) молчит, а в десятом кричит, что тут утечка, хотя на сам объект released. Кроме того у нас установлен "run on idle" на COM+ app, и поэтому он показывает на CreateInstance утечку. Он(ВС) провераяет статус памяти до того, как com-components освобождаются. Может я где-то settings у него не так поставил... 1. Проблема в том, что аппликация уже написана и работает и сейчас менять что-то координально не могу - начальство не поймет :). Проблема еще в том, что вычленить и проверить каждый объект по отдельности тоже могу только отчасти, потому что они очень завязаны между собой(такое досталось наследство :) ) Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 15:48 |
|
||
|
Утечка памяти на многопроцессорной машине
|
|||
|---|---|---|---|
|
#18+
авторПроблема еще в том, что вычленить и проверить каждый объект по отдельности тоже могу только отчасти, потому что они очень завязаны между собой(такое досталось наследство :) ) Т.е. есть вероятность, что что-то не релизится. Найти ошибку тут будет довольно трудно. Попробуй на многопроцессорной тачке под свой сервер выделить только один процессор (см. SetProcessAffinityMask ). Если память будет расти, то значит дело не в многопроцессорности, а возможно в синхронизации ( или её отсутствии ). Хотя в любом случае проблемный кусок нужно определять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 16:02 |
|
||
|
Утечка памяти на многопроцессорной машине
|
|||
|---|---|---|---|
|
#18+
Я установил на свой процесс через task manager affinity=1. Получил утечку памяти... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 17:20 |
|
||
|
Утечка памяти на многопроцессорной машине
|
|||
|---|---|---|---|
|
#18+
авторЯ установил на свой процесс через task manager affinity=1. Получил утечку памяти... Тогда вряд ли дело в многопроцессорности, хотя, какой у тебя Service Pack, и Processor Pack ? Тут недавно проблема была на PP 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 17:28 |
|
||
|
Утечка памяти на многопроцессорной машине
|
|||
|---|---|---|---|
|
#18+
Windows - Advanced server, SP-4, build 5.00.2195 VC6 SP-5 А где посмотреть Processor Pack версию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2004, 17:39 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=457&tid=2035396]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
12ms |
get forum data: |
4ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 396ms |

| 0 / 0 |
