← Zurück

[BUG] System.OutOfMemoryException

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

Я пробовал делать:

	
		GC.Collect();
		GC.WaitForPendingFinalizers();

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

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

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

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (17)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

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

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

President
President Autor

Mikhail Sukhov:

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

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

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

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

Евгений
Евгений

President:

Mikhail Sukhov:

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

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

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

Евгений
Евгений

Mikhail Sukhov:

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

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

Да, у меня 3.2.9.

Mikhail Sukhov
Mikhail Sukhov

Евгений:

Mikhail Sukhov:

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

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

Да, у меня 3.2.9.

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

Евгений
Евгений

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
Mikhail Sukhov

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

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

Евгений
Евгений

Mikhail Sukhov:

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

Евгений
Евгений

Mikhail Sukhov:

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

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

Евгений
Евгений

Mikhail Sukhov:

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

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

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

Mikhail Sukhov
Mikhail Sukhov

Евгений:

Mikhail Sukhov:

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

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

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

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

Евгений
Евгений

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
Mikhail Sukhov

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

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

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

Garic
Garic

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

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

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