[BUG] System.OutOfMemoryException
Atom Ответить
29.07.2011


При тестировании на истории через пару виртуальных дней стабильно валится с эксепшном:
Exception of type 'System.OutOfMemoryException' was thrown

Я пробовал делать:
Код
	
		GC.Collect();
		GC.WaitForPendingFinalizers();

каждый виртуальный час - не помогло.

Валится обычно либо на AddInfoLog либо в нердах MarketDepthGenerator'а

Похоже что кто-то накапливает объекты и не отдает их.

Если подскажете как локализовать проблему попробую это сделать.



Спасибо:




17 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 01.08.2011
Ответить


President Перейти
Если подскажете как локализовать проблему попробую это сделать.


Наверное проще всего - это профайлером. А так общие вопросы. Сколько инструментов используете при тестировании? Стратегия строит свечки?
Спасибо:

Garic

Фотография
Дата: 01.08.2011
Ответить


Перешёл на 3.2.5 - у меня тоже вылетает :(
Пример - Гидра, показать сделки по RIH1 за период 01.12.2010-15.03.2011
Вылетает на получении Trades GetTradeStorage(security).Load.

Примерно можно загрузить чуть более миллиона записей - дальше OutOfMemory. В старой верии (3.1.3) выгружалось без проблем.
Память растёт где-то до 1,2гига, больше почему-то не хавает - это нормально?
Система Win7 32bit.

Ещё заметил - если выгрузить сначала сделки по одному инструменту (меньше млн.), потом ещё по другому - аналогично - почему-то не освобождается память.
Спасибо:

President

Фотография
Благотворитель
Дата: 02.08.2011
Ответить


Mikhail Sukhov Перейти
President Перейти
Если подскажете как локализовать проблему попробую это сделать.


Наверное проще всего - это профайлером. А так общие вопросы. Сколько инструментов используете при тестировании? Стратегия строит свечки?


какой профайлер посоветуете?

инструментов - падает даже на 2х
про свечки - падает даже без них
я комментарил вообще большую часть кода - оставлял только почти пустой OnProcess и все равно падает
у меня предположение что это происходит из-за генерации стакана (т.к. иногда выдает что памяти не хватило на CreateQuote гдето в глубинах генерения стакана)



Автор топика
Спасибо:

Евгений

Фотография
Дата: 18.08.2011
Ответить


President Перейти
Mikhail Sukhov Перейти
President Перейти
Если подскажете как локализовать проблему попробую это сделать.


Наверное проще всего - это профайлером. А так общие вопросы. Сколько инструментов используете при тестировании? Стратегия строит свечки?


какой профайлер посоветуете?

инструментов - падает даже на 2х
про свечки - падает даже без них
я комментарил вообще большую часть кода - оставлял только почти пустой OnProcess и все равно падает
у меня предположение что это происходит из-за генерации стакана (т.к. иногда выдает что памяти не хватило на CreateQuote гдето в глубинах генерения стакана)





Получилось у кого-нибудь локализовать проблему? У меня тоже вылетает (((
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 18.08.2011
Ответить


Евгений Перейти
Получилось у кого-нибудь локализовать проблему? У меня тоже вылетает (((


Даже на последних версиях?
Спасибо:

Евгений

Фотография
Дата: 18.08.2011
Ответить


Mikhail Sukhov Перейти
Евгений Перейти
Получилось у кого-нибудь локализовать проблему? У меня тоже вылетает (((


Даже на последних версиях?


Да, у меня 3.2.9.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 18.08.2011
Ответить


Евгений Перейти
Mikhail Sukhov Перейти
Евгений Перейти
Получилось у кого-нибудь локализовать проблему? У меня тоже вылетает (((


Даже на последних версиях?


Да, у меня 3.2.9.


x64 или x86? Сколько памяти по таск манагеру начинает кушать приложение? Попробуйте уменьшить потоки загрузки и кол-во дней в памяти (описано в доке chm раздел Тестирование на истории).
Спасибо:

Евгений

Фотография
Дата: 19.08.2011
Ответить


Mikhail Sukhov Перейти
Евгений Перейти
Mikhail Sukhov Перейти
Евгений Перейти
Получилось у кого-нибудь локализовать проблему? У меня тоже вылетает (((


Даже на последних версиях?


Да, у меня 3.2.9.


x64 или x86? Сколько памяти по таск манагеру начинает кушать приложение? Попробуйте уменьшить потоки загрузки и кол-во дней в памяти (описано в доке chm раздел Тестирование на истории).


У меня x64. По умолчанию были следующие параметры LoadingThreadCount=3. Количество ядер у меня 2 плюс 2 виртуальных. А вот с DaysInMemory не понял. Стояло 15. Хотя в описание для x64 должно быть 10. Вообщем постепенно уменьшал потоки и дни программа все равно висла. Последний тест был поток=1, дни=2. Памяти было свободно 1600 зависло на уровне 340. Первые тесты делал было 1250 и вылетало при отсутствии свободной памяти.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.08.2011
Ответить


Евгений Перейти

У меня x64. По умолчанию были следующие параметры LoadingThreadCount=3. Количество ядер у меня 2 плюс 2 виртуальных. А вот с DaysInMemory не понял. Стояло 15. Хотя в описание для x64 должно быть 10. Вообщем постепенно уменьшал потоки и дни программа все равно висла. Последний тест был поток=1, дни=2. Памяти было свободно 1600 зависло на уровне 340. Первые тесты делал было 1250 и вылетало при отсутствии свободной памяти.


Не совсем понятно... Висит или вылетает?
Спасибо:

Евгений

Фотография
Дата: 19.08.2011
Ответить


Mikhail Sukhov Перейти
Евгений Перейти

У меня x64. По умолчанию были следующие параметры LoadingThreadCount=3. Количество ядер у меня 2 плюс 2 виртуальных. А вот с DaysInMemory не понял. Стояло 15. Хотя в описание для x64 должно быть 10. Вообщем постепенно уменьшал потоки и дни программа все равно висла. Последний тест был поток=1, дни=2. Памяти было свободно 1600 зависло на уровне 340. Первые тесты делал было 1250 и вылетало при отсутствии свободной памяти.


Не совсем понятно... Висит или вылетает?


У меня сначала была включена студия и свободной памяти было меньше изначально, во время тестирования доходило до 0 и вылетало. А потом я высвободил - изначально стало 1600. Зависло на уровне 340.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.08.2011
Ответить


Евгений Перейти
У меня сначала была включена студия и свободной памяти было меньше изначально, во время тестирования доходило до 0 и вылетало. А потом я высвободил - изначально стало 1600. Зависло на уровне 340.


Ок, понятнее.. А почему думаете что зависло? Событие ITrader.NewTrades вызывается?
Спасибо:

Евгений

Фотография
Дата: 19.08.2011
Ответить


Mikhail Sukhov Перейти
Евгений Перейти
У меня сначала была включена студия и свободной памяти было меньше изначально, во время тестирования доходило до 0 и вылетало. А потом я высвободил - изначально стало 1600. Зависло на уровне 340.


Ок, понятнее.. А почему думаете что зависло? Событие ITrader.NewTrades вызывается?


Появилось сообщение, что программа не отвечает. Я запускал .exe, событие не смотрел
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.08.2011
Ответить


Евгений Перейти
Появилось сообщение, что программа не отвечает. Я запускал .exe, событие не смотрел


Мы сейчас говорим про пример SampleHistoryTesting?
Спасибо:

Евгений

Фотография
Дата: 19.08.2011
Ответить


Mikhail Sukhov Перейти
Евгений Перейти
Появилось сообщение, что программа не отвечает. Я запускал .exe, событие не смотрел


Мы сейчас говорим про пример SampleHistoryTesting?


В данном случае там есть мои модификации незначительные. Но я прогнал еще раз пример SampleHistoryTesting по тем же данным 1 поток 5 дней. Инструмент RIU1 с 9.02.2011 по 15.08.2011. Память свободную приложение также задействовало и комп фактически полностью висел (у меня I5 и Озу 4 гб) и высвечивалось, что приложение не отвечает. Но я оставил на несколько часов комп и в конце концов тестирование прошло по всем данным. Попробую еще раз подождать и со своим примером.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.08.2011
Ответить


Евгений Перейти
Mikhail Sukhov Перейти
Евгений Перейти
Появилось сообщение, что программа не отвечает. Я запускал .exe, событие не смотрел


Мы сейчас говорим про пример SampleHistoryTesting?


В данном случае там есть мои модификации незначительные. Но я прогнал еще раз пример SampleHistoryTesting по тем же данным 1 поток 5 дней. Инструмент RIU1 с 9.02.2011 по 15.08.2011. Память свободную приложение также задействовало и комп фактически полностью висел (у меня I5 и Озу 4 гб) и высвечивалось, что приложение не отвечает. Но я оставил на несколько часов комп и в конце концов тестирование прошло по всем данным. Попробую еще раз подождать и со своим примером.


Какие показатели по памяти? Насколько загружены потоки? Пробовали дни уменьшить?
Спасибо:

Евгений

Фотография
Дата: 19.08.2011
Ответить


Mikhail Sukhov Перейти
Евгений Перейти
Mikhail Sukhov Перейти
Евгений Перейти
Появилось сообщение, что программа не отвечает. Я запускал .exe, событие не смотрел


Мы сейчас говорим про пример SampleHistoryTesting?


В данном случае там есть мои модификации незначительные. Но я прогнал еще раз пример SampleHistoryTesting по тем же данным 1 поток 5 дней. Инструмент RIU1 с 9.02.2011 по 15.08.2011. Память свободную приложение также задействовало и комп фактически полностью висел (у меня I5 и Озу 4 гб) и высвечивалось, что приложение не отвечает. Но я оставил на несколько часов комп и в конце концов тестирование прошло по всем данным. Попробую еще раз подождать и со своим примером.


Какие показатели по памяти? Насколько загружены потоки? Пробовали дни уменьшить?


Если по примеру SampleHistoryTesting, то по памяти - задействовано была вся свободная память-где-то 1,5 гб. Процессор загружен на 50%. Дни меньше 5ти не пробовал. Если по моему примеру, то писал выше.

А еще при попытке остановить тестирование прежде чем оно закончится получается вот это

Цитата:
System.TimeoutException не обработано пользовательским кодом
Message=Поток эмуляции не остановился в течении 10 секунд.
Source=StockSharp.Algo
StackTrace:
в StockSharp.Algo.Testing.EmulationTrader.Stop()
в SampleHistoryTesting.MainWindow.StartBtn_Click(Object sender, RoutedEventArgs e) в D:\StockSharp_3.2.9_Sources\Samples\Testing\SampleHistoryTesting\MainWindow.xaml.cs:строка 64
в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
в System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
в System.Windows.Controls.Button.OnClick()
в System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
в System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
в System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
в System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
в System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
в System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
в System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
в System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
в System.Windows.Input.InputManager.ProcessStagingArea()
в System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
в System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
в System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
в System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
в System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
InnerException:


Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 21.08.2011
Ответить


Евгений Перейти

А еще при попытке остановить тестирование прежде чем оно закончится получается вот это

Цитата:
System.TimeoutException не обработано пользовательским кодом
Message=Поток эмуляции не остановился в течении 10 секунд.
Source=StockSharp.Algo



Да, с этим проблема концептуального характера. Похоже, нет возможности сделать метод Stop блокирующим. Придется делать его как и для стратегий - асинхронным.
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy