Алексей Алексеев Добро пожаловать в мой уютненький бложек

1Cv7.7 «Недостаточно памяти»

Недавно столкнулся с проблемой, при формировании отчета в ТиС 9.2 за большой период, порядка 6 лет, вылетает ошибка "Недостаточно памяти" и приложение закрывается. Удивлению не было предела, ибо использовал я Windows Server 2003 x64 с 25Gb оперативной памяти. На момент вылета приложения на сервере было свободно порядка 18Gb памяти.

Повторное формирование этого отчета пролило свет на суть проблемы. Дело в том, что вылет происходил, когда процесс потреблял более 2Gb памяти. И тут я вспомнил то, что не следовало забывать. 32 разрядные приложения в обычных условиях могут адресовать только 2 гигабайта памяти, как в 32- так и в 64- битных системах. Под обычными условиями понимается то, что программа была скомпилирована без учета потребеления большего количества памяти, рассказывать всю теорию о виртуальной памяти в windows я не буду, расскажу лишь как решить проблему.

Для начала скачиваем маленькое приложение 4Gb Patch и патчим исполняемый файл (1cv7s.exe), и если у вас Windows x64, то больше ничего делать не нужно.

Если у вас Windows x86:

Windows Vista, Windows 7, Windows 2008:
BCDEdit /set increaseuserva XXXX (где XXXX количество памяти в мегабайтах в диапазоне 2048 - 3072)
BCDEdit /set.

Windows XP, Windows Server 2003:
В фале boot.ini прописать: /3GB /userva=XXXX (где XXXX количество памяти в мегабайтах в диапазоне 2048 - 3072).

[Boot Loader]
Timeout=30
Default=multi(0)disk(0)rdisk(0)partition(2)\WINNT
[Operating Systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="Microsoft Windows Server 2003" /fastdetect /3GB /Userva=2900

Служба поддержки продуктов корпорации Майкрософт настоятельно рекомендует использовать для параметра /userva=XXXX память в диапазоне 2 900–3 030. Также следует учитывать, что данные изменения коснутся абсолютно всех приложений.

P.S.: Данный метод подходит и для других приложений, но перед тем как патчить приложение, нужно проверить его на наличие флага LARGEADDRESSAWARE. Это можно сделать с помощью таких программ, как: ExeInfo, Program to analyze PE files, CFF Explorer.

Комментарии (4) Пинги (0)
  1. Спасибо! То, что нужно!

  2. Спасибо, помогло!

  3. у меня с некоторых пор 1С (порог примерно 1ГБайт) не пишет «недостаточно памяти». а просто вычисления останавливаются, а окно обработки можно закрыть, нажав ESC. загрузка процессора при этом нулевая. после этого 1С не реагирует ни на какие кнопки.
    поставил патч (система 64-разрядная). и преодолел эту проблему. вот уже 1.3Гбайта, и продолжает вычисления…
    причем еще заметил, что такое же зависание происходило при простой передаче данных (списка значений) в обработчике подбора. решил проблему так — в подборе возвращаю короткую строку, а сами данные передаю через файл (значениевфайл — значениеизфайла)


Оставить комментарий

Нет обратных ссылок на эту запись.