Нехватка памяти для asn1

Обновлено: 07.07.2024

Был у меня случай, пришел клиент, говорит, при закрытии месяца вылетает ошибка "Недостаточно памяти". Взялся я за эту проблему. Думал, что легко, сначала добавил оперативки - ошибка. Было 2 гигабайта, стало 4, а все равно 1с-ке мало. Размер файла подкачки менял - ошибка, переустановка системы (поставил Windows 7) дало только временный результат, где-то на неделю. Перепробовал все. Спустя некоторое время решение было найдено.

Решение

На клиентском компе запустить командную строку от имени администратора, прописать там следующее:

BCDEdit /set increaseuserva xxxx - вместо хххх пишите объем виртуального адресного пространства в мегабайтах, т.е. сколько нужно памяти под работу приложений. По умолчанию 2 гига. Вообще в 32-разрядных операционных системах выделяется 4 гигабайта: 2 - на приложения и 2 на нужды самой ОС. Я выбрал 3000 (т.е. CDEdit /set increaseuserva 3000). Однако система может подглючивать. Особенно, если у вас 2 гига оперативки, как у меня. Это для ОС семейства Windows Vista, 7, Windows 2008.

Для Windows XP \ Windows 2003 пишем
/3GB /userva=xxxx (xxxx в МБ в диапазоне 2048 - 3072) в файле boot.ini, рекомендуемый максимум значений userva 2900–3030.

Вот и все. Надеюсь, эта статья будет вам полезна. А вот и ссылки, откуда я все это узнал, где можно посмотреть более подробную информацию:

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Как может помочь 64 винда, если клиент 1С 32? 64 поможет сейчас только в linux и только на 8.3 (там клиент тоже есть 64).

Реальное решение только одно - перенос логики расчета на сервер 1С 64.

Поговаривают, что 64 разрядный клиент есть и под Windows, но это надо ооочень хорошо попросить у 1С =)))

(2) pumbaE, в 64-битных ОС нет ограничения виртуальной памяти (2 гигабайта). Поэтому 1с может спокойно работать. Хотя, если честно, первый раз сталкиваюсь с тем, что приложение съедает более 2 гигов виртуалки. Обычно хватает не более 1 гига. А что еще более удивило, что эта проблема не только у 1С, тот же автокад тоже "грешен". noxomb; Cat-Ek; Dmitri93; Gotcha; quNas; frost_a; kulkrise; bulpi; + 8 – 1 Ответить (7) pumbaE, что ж, значит не тот случай. У меня прошло все успешно. Опять таки статья описывает мой опыт, как мне удалось. Конечно есть вероятность, что у других не пойдет. (7) pumbaE, про хомячков как точно то подмечено, очень понравилось :D Мне помогала просто установка размера файла подкачки в "Определяется операционной системой" (3) Alex_E, пытался, но к сожалению не проканало. Вот и пришлось мудрить ).

>Как правильно заметили выше - уносите логику на сервер, там такой беды нет.

Да ничерта это не "правильно заметили". Правильно заметили - это эксперимент с отчетом, описанный вывше. С полгода назад проводил такой же эксперимент. Клиент-серверный режим, типовая УТ 11. Делаем любой типовой отчет с извратными настройками за большой период. ОК, логика перенесена на сервер, клиент простаивает. Вроде бы все хорошо, ну это пока сервер не начнет передавать клиенту все, что он там насчитал. Итого на клиенте та же самая ошибка с нехваткой памяти. Тонкий клиент, отжирающий 2Гб оперативной памяти - ну я даже и не знаю, что сказать.

Так что только 64-битный клиент спасет Отца русской демократии.

У Меня при выгрузке номенклатуре в WINDows 7 64 bit с 8 гагами такая ошибка выкидывает

ИМХО - нужно оптимизировать код.
Иначе, через пару недель/месяцев, снова встретите эту ошибку.

Например, при выгрузке номенклатуры делать ее частями. При типовом обмене можно установить размер пакета. Это тоже очень помогает на больших базах.

В случае живой и растущей базой, увеличение доступной памяти до 3Гб - временное решение.

(12) Alex_IT, в принципе вы правы, нужно контролировать размер базы, делать свертку и т.д. Тогда все будет в "шоколаде". Данный способ, который описан в этой статье, предназначен для быстрого решения проблемы, когда нет времени на оптимизацию базы, кода. Поговаривают, что 64 разрядный клиент есть и под Windows, но это надо ооочень хорошо попросить у 1С =))) Скоро опять вспухнет, вопрос времени. Свертка базы или сервер 1С, но так хочется верить что скоро будет 64-битный клиент :) Для 7.7 подходит? (в случае выгрузки xml большого размера - обработки падают, ссылаясь на нехватку оперативки). (17) zzzz5555, честно, не экспериментировал над 1с 7.7. Какая именно ошибка вылетает? Можете поподробнее ее описать. а мне не помогло ничего, при формировании отчета после съедания 1,5 гб памяти падает. Хотя всего 8, и настроики уже сделал в винде чтоб выделять приложениям Ребят, помогайте, не могу разобраться.
Есть база бухгалтерии 8.2 2.0, вес в файловом 16гб., железо 1 Xeon 3430, 24гб оперативы, дискового свободно около 1Тб, файл подкачки был 24гб, поставил 50гб, винда 2008 сервер, 64-разрядный энтерпрайз, формирую отчет книгу предпринимателя выпадает в ошибку "Недостаточно памяти" после 3 870 000 кб по дспетчеру, всё перепробовал - разные релизы платформы, даже на 8.3 переводил, поставил sql2008, та же песня, вылетает именно платформа, как вариант поставить х64 платформу 8.3, но нигде не могу найти такую.

(20) stei, 16 гигов файловая база? - ах..еть. Конечно надо на клиент-серверный вариант переносить. Ну а далее провести диагностикку базы - тестирование, исправление и прочее, свертку базы. Кстати, ты говоришь, что поставил sql2008. Он 64-разрядный? Если ось 64разр, то и желательно , чтобы все приложения были из этой серии. По поводу оперативки - она вся задействуется? Или только часть ее? Просто в виндах есть такая штука, впроде поставил столько-то, а она визически не может видеть больше. Как я понимаю мой метод вряд-ли тут подойдет, т.к. у тебя винда 64-разрядная. Хотя, если терять нечего, стоит попробовать. По поводу обращения в компанию 1С с этой проблемой, сразу говорю - бесполезно, хоть ты им по почте пришли комп с базой на борту, они никак не помогут. Есть конечно вариант открыть базу через конфигуратор и через отладчик прогнать всю эту процедуру. Может на какой-нибудь строки и "запинается". В общем подведу итоги:

P.S: А вообще я уже забил на эту 1С. Устал бороться с темным лесом бухгалтерии и глючности программы. Если честно - не жалею, что отошел от 1С )).

(21) (22) Ta_Da, (23) jsuh, Винда 64-разрядная, скула соответственно тоже, всё дело в клиенте, именно то, что он 32-разрядный не дает ему кушать больше 4гб оперативы, как вывод - ошибка.
Обрезка не вариант, то, что можно было уже срезали, реализаций очень много просто на предприятии.
Отчет стандартный, переписать конечно можно, но это время, да и как клиенту объяснить, мол, простите, стандартные отчеты, которые пишет 1с не катят ))) Вообще странно, не думаю, что ситуация у нас прям такая уникальная.
База изначально и крутится на скуле, в файловый вариант перевел только для тестов, соответственно проверки чекдбф-ом и "тестирование и исправление" делал, не один раз.
Выход пока нашел, поставил 8.3 платформу, после танцев с бубном в файловом варианте формирование отчета прошло нормально, но всё равно это только полумера, нужно на скулу обратно. Как вариант 64-битный клиент 8.3, говорят, что есть такой в природе, если есть у кого - поделитесь )) (24) stei, дык я вам и пишу про то что клиентское приложение 32 битное.
Про сервер я упоминал в плане "обрабатывать все данные на сервере, на клиент передавать только готовую таблицу". Изврат возможно, но может сработать. (24) stei, по-идее релиз 1с 8.3 64-битный должен быть на официальном сайте в свободном доступе (разумеется только для тех, у кого оформлен договор ИТС). Если там нет, то можно узнать об этом в службе поддержки. На других сайтах, я думаю, лучше не искать. Если на офсайте нет, то на других - подавно. (20) stei, у вас 32ух битное клиентское приложение (толстый клиент). Больше 4 гигов оперативки оно не может "съесть".
Тут либо переход на сервер 64x (с вероятным переписыванием отчета) либо просто переписывание отчета, чтобы данные обрабатывались кусками. (20) stei, 1) попробуй срезать базу, уж очень она огромная. На сколько я помню, таблицы регистров в файловом варианте не должны превышать 2Гб. Если хоть одна таблица переваливает за этуу отметку срочно или реж базу. или переходи на клиент-сервер. Спасибо друг) Долго я мучился с этой ошибкой, даже отчет пришлось переделать.

Привожу и свой пример.

Была у меня аналогичная ошибка с проведением "закрытии месяца". Конфигурация ИМПУЛЬС-ИВЦ "Подрядчик строительства" 8.2.

Перепробовал все варианты, хорошо еще было время - бухгалтерия терпела.

Пишу в поддержку 1С они отвечают - виновата фирма ИМПУЛЬС-ИВЦ. Пишу в ИМПУЛЬС-ИВЦ их ответ - виновата платформа 1С. Отфутболили.

Что означает нехватка памяти для ASN1?

Есть такая система сдачи отчетности Такском, у пользователя выскочило уведомление:

[info]Уведомление о запрете использования сертификатов, выпущенных по ГОСТу 34.10-2001. Ошибка в процессе приема пакетов. В процессе приема документа от регламенту произошла ошибка. Не удалось получить размер для расшифрованных данных, причина нехватка памяти для ASN1. Код ошибки 0x80093106[/info]


  • Необработанное исключение: System.Security.Cryptography.CryptographicException: ASN1 недостаточно памяти.
  • в System.Security.Cryptography.Pkcs.EnvelopedCms.OpenToDecode (Byte [] encodedMessage)
  • в System.Security.Cryptography.Pkcs.EnvelopedCms.Decode (Byte [] encodedMessage)

Эта проблема возникает из-за того, что размер буфера неправильно увеличивается в функции CryptMsgUpdate, когда метод EnvelopedCms.Decode добавляет декодированный контент в буфер во время процесса декодирования. Таким образом, целочисленное переполнение происходит для большого файла.

Производим установку обновлений KB248099. Запускаем его и соглашаемся на установку.

Сам процесс установки обновления KB248099 занимаем менее минуты.

Command to generate Java source:

The source is generated:

When I decode the first CDR file, it parses 3 lines only, the CDR file is supposed to contain more than 100 lines, so it is partially decoded.

When I try decoding another CDR file, it is failed when decoding CDR file and gave me such error:

My ASN.1 specification file does not have any syntax error when I use tool checking its syntax.

Can anyone who knows ASN.1 well help me about this?

  • Mark as New
  • Bookmark
  • Subscribe
  • Mute
  • Subscribe to RSS Feed
  • Permalink
  • Print
  • Email to a Friend
  • Report Inappropriate Content

I have developed a simple application that queries the bucket data for a given subscriber (using the getQuotaStatus API). However, despite I believe the source code is correct, I cannot get any reply back from the SCE.

The client-side debugging (in Log4J) confirms that everything is fine, and that the getQuotaStatus() command was issued properly.

I did some debugging by enabling the command "management-agent sce-api logging" on the SCE command line, and I see this log entries:

Is this a known bug? How can I debug more, for example how can I get the text the SCE is trying to decode in ASN.1 notation?

I can post some snippet of my code, which is anyway very simple.

  • Mark as New
  • Bookmark
  • Subscribe
  • Mute
  • Subscribe to RSS Feed
  • Permalink
  • Print
  • Email to a Friend
  • Report Inappropriate Content

help much unfortunately. For instance, it can happen even when

there was a network connection issue between SCE and API.

closed BAD: input is closed ASN.1 decode error @ offset 930: Unexpected end-of-buffer encountered..

The method getQuotaStatus works fine for me, so there should

One thing I can come up with is that you need to configure

as below to get proper values by getQuotaStatus.

RDR-formatter destination 127.0.0.1 port 33001 category number 4 priority

Configuring the Quota Manager

the following information for further troubleshooting.

+ SCE and API version

+ OS which runs the API

+ Snippet of your code

  • Mark as New
  • Bookmark
  • Subscribe
  • Mute
  • Subscribe to RSS Feed
  • Permalink
  • Print
  • Email to a Friend
  • Report Inappropriate Content

Many thanks for your answer.

RDR-formatter destination 127.0.0.1 port 33001 category number 4 priority 100

in the configuration. There are no other destinations for category 4.

By the way, I see that this problem is still open on 3.7.0, see "CSCsm19587" in the release notes (

However, I cannot get any answer from the SCE. My details:

  • SCE and API version: SCE8000 running version 3.6.5 Build 489. API version is: 3.6.5 Build 300.
  • Java version: 1.6.0_26
  • OS which runs the API: tried both Windows 7 and Apple OSX 10.6
  • Snippet of your code: see below

This is the code of the main class :

This is the code of SceQuotaListener.java :

This is the code of SceResultHandler.java :

  • Mark as New
  • Bookmark
  • Subscribe
  • Mute
  • Subscribe to RSS Feed
  • Permalink
  • Print
  • Email to a Friend
  • Report Inappropriate Content

Hmm.. the source code you provided works fine for me on

my setup which runs same versions with yours.

I have added some println lines in your code to see the received value

and here is the result.

1: 1048576(bucket id:value)

But when no bucket is assigned to the subscriber, then no value is returned.

So I assume you need to complete Quota related configurations including

Quota RDR settings on SCA-BB GUI(which I pointed in the previous reply) and

QM config on SM.

Please refer to the following doc for the detail.

You can check if a bucket.quota is assigned to a subs by:

Bucket type: Total Volume

Bucket state: OK

Bucket size: 1048576

If no bucket is assigned:

BTW, do you always see the following error?

closed BAD: input is closed ASN.1 decode error @ offset 930: Unexpected end-of-buffer encountered..

Or the above error is one time event and your problem is that simply

  • Mark as New
  • Bookmark
  • Subscribe
  • Mute
  • Subscribe to RSS Feed
  • Permalink
  • Print
  • Email to a Friend
  • Report Inappropriate Content

Thanks again for helping me.

The only difference with my configuration is in this screen:


the guide suggests to configure "Gy", while I am using the second option instead. The difference is not fully clear to me.

I do see a similar output when I query a user with associated quota:

Bucket type: Total Volume

Bucket state: OK

Bucket size: 1048576

I always get the error

closed BAD: input is closed ASN.1 decode error @ offset 930: Unexpected end-of-buffer encountered..

every time I use the getQuotaStatus().

Any other idea or debugging to suggest?

  • Mark as New
  • Bookmark
  • Subscribe
  • Mute
  • Subscribe to RSS Feed
  • Permalink
  • Print
  • Email to a Friend
  • Report Inappropriate Content

Last thing I can think of is that there is something issue in your network between your API

between them. Seems the IP of SCE is 123.123.123.2 and the API is 192.168.2.101,

so I believe they are in different network.

  • Mark as New
  • Bookmark
  • Subscribe
  • Mute
  • Subscribe to RSS Feed
  • Permalink
  • Print
  • Email to a Friend
  • Report Inappropriate Content

Thanks so much for spending time to help me.

ps: the ip 123.123.123.123 is a placeholder. There is no NAT nor firewall between the SCE and the API client. I tried this already.

  • Mark as New
  • Bookmark
  • Subscribe
  • Mute
  • Subscribe to RSS Feed
  • Permalink
  • Print
  • Email to a Friend
  • Report Inappropriate Content

but there is something I forgot to suggest.

How many subscriber do you have in your SCE box?

If you have more than one and if this is not a production

environment, can you try clearing all the subscribers once

then import ev_btest32 only and try the test again?

If this is not a production, you can enable the following

debug rpc-adapter debug-mode on

debug rpc-adapter debug-mode off

The debug log generated can be found:

you please try reloading your SCE or try different SCE box?

Of course if this is not a production.

  • Mark as New
  • Bookmark
  • Subscribe
  • Mute
  • Subscribe to RSS Feed
  • Permalink
  • Print
  • Email to a Friend
  • Report Inappropriate Content

Thanks so much again for your help.

  • Mark as New
  • Bookmark
  • Subscribe
  • Mute
  • Subscribe to RSS Feed
  • Permalink
  • Print
  • Email to a Friend
  • Report Inappropriate Content

My intention was that something performance factor(num of subs, e.g.) is related to this issue

as in working case I see the following log(indicated in red) just after the same log(indicated in blue)

with yours, while in your case nothing happens about for 5 seconds then generates the error.

Бобков Олег

Общее представление

Функциональная специфика операционной системы Windows, чаще всего встречающейся на компьютерах, используемых в профессиональных целях, характеризуется выделением лимитированного объема адресного пространства, которое может использоваться программным обеспечением. Дефолтные настройки выглядят совсем просто: 2 ГБ для 32-разрядной версии, и в два раза больше — для 64-битной ОС.

В процессе активной работы, с использованием сразу нескольких одновременно запущенных программ, высока вероятность появления уведомления о том, что у 1С недостаточно свободной оперативной памяти для обработки команды или выполнения операции. В лучшем случае все начинает работать очень медленно, в худшем — приложения или ОС «вылетают» без сохранения промежуточных результатов. При наличии подобной симптоматики, возникающей в ответ на выполняемые действия, в первую очередь следует озадачиться вопросом увеличения доступного адресного пространства до объема, достаточного для полноценной работы.

Решение проблемы на клиентском компьютере

Итак, для Microsoft Windows ключевым проблемным фактором обычно оказывается выход за пределы рамок, определенных базовыми настройками операционной системы. Чем выше разрядность используемой версии — тем большее количество отведено под использование, однако даже четырех гигабайт далеко не всегда бывает достаточно. Особенно если речь идет о требовательных к ресурсам приложениях, графических редакторах или громоздких базах данных, запущенных параллельно работе бухгалтерской учетной программы.

Что делать, когда 1С пишет, что ей недостаточно памяти для выполнения запроса, и закрывается или вылетает вместе со всей системой? Если причина кроется в адресном пространстве — существует несколько способов оперативного восстановления нужных кондиций.

Самый простой из вариантов — окончательный вывод из конфигурации объектов, ранее уже помеченных на удаление. Это необязательно станет панацеей, однако в любом случае не будет лишним — примерно так же, как перезагрузка ПК, рекомендуемая системными администраторами в качестве первой опции при любых неполадках. Пользователь ничем не рискует, поскольку не вмешивается своими действиями во внутреннюю механику работы программы.

Вторая опция — обман системы. Да, Windows можно обмануть, и, если все сделано правильно, проблема перестанет доставлять неудобства. Речь идет о формальном переходе с 32-битной на 64-разрядную версию, за счет которого автоматически увеличивается адресное пространство, выделяемое ОС по умолчанию. Фактических, она перестроит свою работу так, чтобы большее количество оперативки могло использоваться программным обеспечением — и это как раз то, что нам нужно.

Впрочем, подобный вариант срабатывает не во всех случаях. Чтобы убедиться, что все идет по плану, следует придерживаться стандартного алгоритма действий — иначе есть вероятность ухудшить работоспособность в будущем. Последовательность операций, совершаемых пользователем на клиентском компьютере, когда диагностирована нехватка адресной памяти для 1С, выглядит следующим образом:

  1. Запуск командной строки Windows. Microsoft предлагают использовать для этого обычное меню «Пуск», либо комбинацию «горячих клавиш» Win+R — в появившейся форме достаточно ввести значение «cmd», и запустить операцию нажатием на Enter.
  2. На экране должно возникнуть новое окно с черным полем для ввода данных. В нем прописывается команда «bcdedit/set increaseuserva 3200», число в которой отображает ограничение, установленное на использование ОЗУ. В этом случае речь идет об увеличении до 3,2 Гб, что обуславливается необходимостью постепенной корректировки системных настроек.
  3. После завершения процедуры нужно перезагрузить ПК — только после этого внесенные изменения вступят в силу. Для проверки результатов потребуется повторно выполнить те же самые действия, которые ранее приводили к ошибке 1 С «Недостаточно памяти». При очередном появлении уведомления следует повторить первый и второй пункт инструкции, но теперь установив цифровое значение на 3600 или 4096. Если же запуск аналогичных программ и обработка запросов не вызывает проблем с функциональным состоянием учетного приложения — вопрос считается решенным, однако остается еще один, завершающий этап.
  4. Для восстановления ограничителя, используемого операционной системой, нужно вновь открыть командную строку, прописав в ней команду «bcdedit/deletevalue increaseuserva». Это условие исключает снижение работоспособности ОС в пользу 1С, и обеспечивает комфортную работу с другим программным обеспечением.

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

Что означает нехватка памяти для ASN1?

Есть такая система сдачи отчетности Такском, у пользователя выскочило уведомление:

[info]Уведомление о запрете использования сертификатов, выпущенных по ГОСТу 34.10-2001. Ошибка в процессе приема пакетов. В процессе приема документа от регламенту произошла ошибка. Не удалось получить размер для расшифрованных данных, причина нехватка памяти для ASN1. Код ошибки 0x80093106[/info]


  • Необработанное исключение: System.Security.Cryptography.CryptographicException: ASN1 недостаточно памяти.
  • в System.Security.Cryptography.Pkcs.EnvelopedCms.OpenToDecode (Byte [] encodedMessage)
  • в System.Security.Cryptography.Pkcs.EnvelopedCms.Decode (Byte [] encodedMessage)

Эта проблема возникает из-за того, что размер буфера неправильно увеличивается в функции CryptMsgUpdate, когда метод EnvelopedCms.Decode добавляет декодированный контент в буфер во время процесса декодирования. Таким образом, целочисленное переполнение происходит для большого файла.

Производим установку обновлений KB248099. Запускаем его и соглашаемся на установку.

Сам процесс установки обновления KB248099 занимаем менее минуты.





Крупным считаем любой файл от 7 Мб в формате XLSM или XLS.

Данная проблема относится к работе криптопровайдера. При подписании файла криптопровайдер действует следующим образом: считывает все содержимое файла в память, считает хеш, подписывает и выдает результат. При недостаточности ресурсов компьютера, данная процедура может завершаться одной из указанных выше ошибок.

В этом случае рекомендуется преобразовывать отправляемые файлы в формат XLSB (Двоичная книга Excel).

Преимущества использования формата XLSB:

  • сохранение и открытие файла происходит быстрее; также быстрее выполняется перерасчет формул и построение таблиц
  • размер файла меньше (экономия траффика при отправке через "ЕИАС Мониторинг")
  • возможность подписания отчёта на ПК с невысокой производительностью и техническими характеристиками (ограниченный объём RAM )
  • работа только в MS Office 2007 и выше
  • для MS Office 2007 рекомендуется установить пакет обновлений Service Pack (не ниже SP2) поскольку при работе в формате XLSB возможно аварийное завершение работы Excel на этапе автосохранения


Эта ошибка может возникнуть при очень многих событиях — обновлении конфигурации, обработке большого файла, при формировании отчета, загрузке большой базы данных и так далее. Здесь речь идёт об адресной памяти, то есть простым апдейтом оборудования тут не помочь.

Ограничения адресной памяти для 1С

Причина кроется в ограниченном выделении адресной памяти операционной системой под программное обеспечение.

Ограничения адресной памяти по умолчанию:

Получите 267 видеоуроков по 1С бесплатно:

Для того чтобы увеличить размер адресной памяти, необходимо:

  1. Запустить командную строку: «Пуск — Выполнить» — введите CMD и нажмите enter.
  2. Введите в командной строке «bcdedit /set increaseuserva 3072″, где 3072 — размер желаемой адресной памяти.
  3. Перезагрузите компьютер.
  4. Попробуйте выполнить действие в 1С 8, которое не получалось ранее.
  5. Если всё получилось и операция повторяется не так часто, рекомендуется вернуть размер адресной памяти к значению по умолчанию с помощью команды «bcdedit /deletevalue increaseuserva».


Вот и всё, надеюсь, помог, хорошего дня!

Другие статьи по 1С:

Если Вы начинаете изучать 1С программирование, рекомендуем наш курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

Читайте также: