Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2013, 21:49   #11
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Динамические данные не хранятся в стеке. Увеличивают, обычно, если статические данные велики и не помещаются. Это для чего такого 1 МБ не хватило? Может изменить структуру программы?
Действительно, динамические данные хранятся в куче, а не в стеке, а тот факт, что стека не хватает, наводит на мысть о наличии в программе ошибок.
В частности, если Вы передаете в процедуру массив, то обычно это следует делать по ссылке. (var-параметр)
s-andriano вне форума Ответить с цитированием
Старый 15.05.2013, 10:47   #12
Rest_Tremor
Пользователь
 
Регистрация: 05.04.2013
Сообщений: 17
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Действительно, динамические данные хранятся в куче, а не в стеке, а тот факт, что стека не хватает, наводит на мысть о наличии в программе ошибок.
В частности, если Вы передаете в процедуру массив, то обычно это следует делать по ссылке. (var-параметр)
Ситуация собственно вот какая:
Есть прикладная программа AgentSMS , которая вынимает тексты SMS и номера из БД Oracle
и передает их по протоколу SMPP на SMS-центр.
В обратном направлении она принимает отчеты о доставке от SMS-центра и складывает их
обратно в БД Oracle с привязкой к оригинальному сообщению по его уникальному номеру.
Работает на Win XP SP2

Суть проблемы в том, что в период высокой нагрузки 3-го числа каждого месяца, когда в
период с 21 до 22 часов на AgentSMS поступает большое количество отчетов, он сбоит с
ошибкой "Out of memory" и приходится AgentSMS несколько раз перезапускать. При этом
часть информации может теряться.

Но все остальное время прога работает на ура. Без ошибок.
Раньше на форуме создавал другой топик по проблеме, посоветовали увеличить размер стека.
Может там и не динамические данные вовсе. ХЗ.
Память прога освобождает. Если бы она не освобождала используемую память, то ошибка вываливалась бы постоянно, каждый день или даже час.

Последний раз редактировалось Rest_Tremor; 15.05.2013 в 10:54.
Rest_Tremor вне форума Ответить с цитированием
Старый 15.05.2013, 11:00   #13
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Подключите MadExcept с включенной опцией проверки утечек памяти.
Человек_Борща вне форума Ответить с цитированием
Старый 15.05.2013, 11:24   #14
Rest_Tremor
Пользователь
 
Регистрация: 05.04.2013
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Подключите MadExcept с включенной опцией проверки утечек памяти.
Спс, а рабочей ссылкой не поделитесь?
Rest_Tremor вне форума Ответить с цитированием
Старый 15.05.2013, 21:51   #15
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Rest_Tremor Посмотреть сообщение
Суть проблемы в том, что в период высокой нагрузки 3-го числа каждого месяца, когда в
период с 21 до 22 часов на AgentSMS поступает большое количество отчетов, он сбоит с
ошибкой "Out of memory" и приходится AgentSMS несколько раз перезапускать. При этом
часть информации может теряться.
А Вы уверены, что Вам нужно именно увеличивать стек, а не уменьшать его?

По идее, запросы логичнее всего обрабатывать в разных потоках.
Для каждого потока выделяется свой стек.
Если потоков слишком много, именно суммарный объем стеков всех потоков может исчерпать всю память.
s-andriano вне форума Ответить с цитированием
Старый 16.05.2013, 11:45   #16
Rest_Tremor
Пользователь
 
Регистрация: 05.04.2013
Сообщений: 17
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
А Вы уверены, что Вам нужно именно увеличивать стек, а не уменьшать его?

По идее, запросы логичнее всего обрабатывать в разных потоках.
Для каждого потока выделяется свой стек.
Если потоков слишком много, именно суммарный объем стеков всех потоков может исчерпать всю память.
В том то все и дело, что обработка идет в разных потоках. Несколько раз проверяли при пиковой нагрузке, перед еррором количество потоков не превышает 7-10.
Rest_Tremor вне форума Ответить с цитированием
Старый 16.05.2013, 12:26   #17
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Спс, а рабочей ссылкой не поделитесь?
http://madshi.net
Человек_Борща вне форума Ответить с цитированием
Старый 16.05.2013, 14:00   #18
Rest_Tremor
Пользователь
 
Регистрация: 05.04.2013
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Благодарю.
Rest_Tremor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Размеры JPanel yazZ3va Общие вопросы по Java, Java SE, Kotlin 1 11.12.2012 14:11
Размеры iframe AlexDn JavaScript, Ajax 1 31.07.2012 15:43
размеры iframe Артэс HTML и CSS 0 13.05.2012 20:09
размеры листьев koshmarius Помощь студентам 4 12.08.2009 15:44
Размеры картинки Lemo Общие вопросы Delphi 22 09.02.2009 00:04