Разбираем частые ошибки ЕГАИС.
Ошибка 1. Проблемы работы с Интернетом, приходит уведомление «Превышено время ожидания». В таком случае, достаточно перезапустить УТМ.
Ошибка 2. Документы в ЕГАИС медленно обрабатываются или вовсе не загружаются.
Очистите базу УТМ, для этого необходимо остановить службу УТМ. После удалить папку «transportDB» по пути «C:UTMtransporter».
Ошибка 3. Периодически в ответ на исходящую ТТН возвращается тикет с комментарием «Java heap space»
Проверьте в логах УТМ следующие ошибки:
Ошибка проверки RSA сертификата
ERROR ru.centerinform.transport.backbone.schedule.RSACertVerificationJob
Количество выделяемой памяти
java.lang.OutOfMemoryError: Java heap space
Чтобы устранить ошибку в УТМ нужно изменить параметр Java:
- Остановите службу транспортного модуля
- Сохраните отдельно оригинал «Install.bat»
- Удалите службу УТМ «Uninstall.bat»
- Измените в Install.bat параметры —JvmMs 500 —JvmMx 1000 (добавлять нужно после —JvmOptions)
- После запустите Install.bat, чтобы установить службу с новым параметром. Установка и удаление службы производится из папки C:UTMtransporterbin
Напоминаем, что нужно вовремя обновлять УТМ. Версия вашего УТМ должна быть не ниже 4.2.0 b2470. Версии модуля ниже b2470 могут работать некорректно.
█ 06.08.2022 19:55
Здравствуйте
После обновления pki ключей и переустановкой утм до 4.2.0-b2480 перестала работать утм
Пробовал устанавливать эмулятор и УТМ на другую систему, не помогает. Поменял местами — установил неработающую точку на ту систему, где все работает, теперь не работает нигде, значит вроде Pki сертификат не причем, то есть со старым Pki тоже не работает. Версии УТМ испробовал разные .Обновил java, в настройках java поставил в Runtime parameters значение -Xms1024m Работало минут 20 и все( В логе куча ошибок, не знаю что делать.
Делал еще так:
«- остановить службу транспорта
— деинсталлировать службу транспорта Delete.bat
— в файле установки службы выставить параметры —JvmMs 500 —JvmMx 1000 (добавлять нужно после —JvmOptions)
— установить службу с новыми параметрами JVM Install.bat
Установка и удаление службы производится из папки UTMtransporterbin.» , -не получается (фото приложил), не запускается служба, пишет что внутренняя ошибка 4. Так на всех трех системах.
Посмотрите пожалуйста что можно сделать.
█ 06.08.2022 20:05
посмотри
вдруг поможет

ссылку на тему вставить не дает 🙁

(0.05Мб)
█ 09.08.2022 06:27
Цитата:
student ➤ посмотри
вдруг поможет

ссылку на тему вставить не дает 🙁

(0.05Мб)
Добрый день, да, такая же проблема с java.lang.OutOfMemoryError: Java heap space всплыла на одной из точек на ровном месте 3 августа, увеличение размера кучи не помогло, разные сборки УТМа тоже, БД вешалась или через 5 минут или через пару часов.
В итоге на 2480 релизе заметил, что в конфиге УТМ не дописывает еще раз диапазон адресов, а просто добавлял строку web.server.access.ip = 0.0.0.0-255.255.255.255 . Убрав эту строку и поставив на чтение конфиг, все работает отлично уже полдня, документооборот большой, подключения по сети от нескольких машин к этому УТМ. Может как-то связано с тем, что 255.255.255.255 широковещательный адрес, и где-то в недрах УТМ недосмотрено что-то.
█ 09.08.2022 09:37
И еще мысли на этот счет, на основании постов в соседней ветке.
Так понял, что web.server.access.ip — это список доверенных адресов, запросы которых обрабатываются с отключенными параметрами безопасности в самом УТМ(возможно). И может сначала цель: используя некую уязвимость заставить УТМ добавить все ip в доверенные, и уже после этого можно засылать кучу запросов или данные, с которыми штатно УТМ не может справиться, так как было замечено, что перед отказом УТМ, процесс начинает жрать минимум 50 процентов процессорного времени.
█ 09.08.2022 10:14
Цитата:
Evgo_D ➤ Так понял, что web.server.access.ip — это список доверенных адресов, запросы которых обрабатываются с отключенными параметрами безопасности в самом УТМ(возможно)
не освсем так. Это список разрешенных IP, только с которых обрабатываются запросы. По умолчанию, этот параметр в конфиге не заполняется, но если он заполнен, то УТМ будет работать только с IP, указанными в этом списке. Запросы с остальных IP будут отклоняться.
█ 09.08.2022 10:17
Цитата:
Evgo_D ➤ И еще мысли на этот счет, на основании постов в соседней ветке.
Так понял, что web.server.access.ip — это список доверенных адресов, запросы которых обрабатываются с отключенными параметрами безопасности в самом УТМ(возможно). И может сначала цель: используя некую уязвимость заставить УТМ добавить все ip в доверенные, и уже после этого можно засылать кучу запросов или данные, с которыми штатно УТМ не может справиться, так как было замечено, что перед отказом УТМ, процесс начинает жрать минимум 50 процентов процессорного времени.
Я цель злоумышленников вижу шире. Они через УТМ (от его лица) хотят получить доступ к ЦП и памяти ПК и далее их использовать для деструктивной деятельности на ПК.
█ 09.08.2022 10:54
Судя по количеству адресов, скорее всего просто ботнет строят…
Часовой пояс GMT +3, время: 00:12.
Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.
Какие бывают типы OutOfMemoryError или из каких частей состоит память java процесса
Если вы словили OutOfMemoryError, то это вовсе не значит, что ваше приложение создает много объектов, которые не могут почиститься сборщиком мусора и заполняют всю память, выделенную вами с помощью параметра -Xmx. Я, как минимум, могу придумать два других случая, когда вы можете увидеть эту ошибку. Дело в том, что память java процесса не ограничивается областью -Xmx, где ваше приложение программно создает объекты.

Область памяти, занимаемая java процессом, состоит из нескольких частей. Тип OutOfMemoryError зависит от того, в какой из них не хватило места.
1. java.lang.OutOfMemoryError: Java heap space
Не хватает место в куче, а именно, в области памяти в которую помещаются объекты, создаваемые программно в вашем приложении. Размер задается параметрами -Xms и -Xmx. Если вы пытаетесь создать объект, а места в куче не осталось, то получаете эту ошибку. Обычно проблема кроется в утечке памяти, коих бывает великое множество, и интернет просто пестрит статьями на эту тему.
2. java.lang.OutOfMemoryError: PermGen space
Данная ошибка возникает при нехватке места в Permanent области, размер которой задается параметрами -XX:PermSize и -XX:MaxPermSize. Что там лежит и как бороться с OutOfMemoryError возникающей там, я уже описал подробнейшим образом тут.
3. java.lang.OutOfMemoryError: GC overhead limit exceeded
Данная ошибка может возникнуть как при переполнении первой, так и второй областей. Связана она с тем, что памяти осталось мало и GC постоянно работает, пытаясь высвободить немного места. Данную ошибку можно отключить с помощью параметра -XX:-UseGCOverheadLimit, но, конечно же, её надо не отключать, а либо решать проблему утечки памяти, либо выделять больше объема, либо менять настройки GC.
4. java.lang.OutOfMemoryError: unable to create new native thread
Впервые я столкнулся с данной ошибкой несколько лет назад, когда занимался нагрузочным тестированием и пытался выяснить максимальное количество пользователей, которые могут работать с нашим веб-приложением. Я использовал специальную тулзу, которая позволяла логинить пользователей и эмулировать их стандартные действия. На определенном количестве клиентов, я начал получать OutOfMemoryError. Не особо вчитываясь в текст сообщения и думая, что мне не хватает памяти на создание сессии пользователя и других необходимых объектов, я увеличил размер кучи приложения (-Xmx). Каково же было мое удивление, когда после этого количество пользователей одновременно работающих с системой только уменьшилось. Давайте подробно разберемся как же такое получилось.
На самом деле это очень просто воспроизвести на windows на 32-битной машине, так как там процессу выделяется не больше 2Гб.
Допустим у вас есть приложение с большим количеством одновременно работающих пользователей, которое запускается с параметрами -Xmx1024M -XX:MaxPermSize=256M -Xss512K. Если всего процессу доступно 2G, то остается свободным еще коло 768M. Именно в данном остатке памяти и создаются стеки потоков. Таким образом, примерно вы можете создать не больше 768*(1024/512)=1536 (у меня при таких параметрах получилось создать 1316) нитей (см. рисунок в начале статьи), после чего вы получите OutOfMemoryError. Если вы увеличиваете -Xmx, то количество потоков, которые вы можете создать соответственно уменьшается. Вариант с уменьшением -Xss, для возможности создания большего количества потоков, не всегда выход, так как, возможно, у вас существуют в системе потоки требующие довольно больших стеков. Например, поток инициализации или какие-нибудь фоновые задачи. Но все же выход есть. Оказывается при программном создании потока, можно указать размер стека: Thread(ThreadGroup group, Runnable target, String name,long stackSize). Таким образом вы можете выставить -Xss довольно маленьким, а действия требующие больших стеков, выполнять в отдельных потоках, созданных с помощью упомянутого выше конструктора.
Более подробно, что же лежит в стеке потока, и куда уходит эта память, можно прочитать тут.
Конечно, вам может показаться данная проблема слегка надуманной, так как большинство серверов нынче крутиться на 64-битной архитектуре, но все же считаю данный пример весьма полезным, так как он помогает разобраться из каких частей состоит память java-процесса.
3.2 Understand the OutOfMemoryError Exception
One common indication of a memory leak is the java.lang.OutOfMemoryError exception. Usually, this error is thrown when there is insufficient space to allocate an object in the Java heap. In this case, The garbage collector cannot make space available to accommodate a new object, and the heap cannot be expanded further. Also, this error may be thrown when there is insufficient native memory to support the loading of a Java class. In a rare instance, a java.lang.OutOfMemoryError may be thrown when an excessive amount of time is being spent doing garbage collection and little memory is being freed.
When a java.lang.OutOfMemoryError exception is thrown, a stack trace is also printed.
The java.lang.OutOfMemoryError exception can also be thrown by native library code when a native allocation cannot be satisfied (for example, if swap space is low).
An early step to diagnose an OutOfMemoryError exception is to determine the cause of the exception. Was it thrown because the Java heap is full, or because the native heap is full? To help you find the cause, the text of the exception includes a detail message at the end, as shown in the following exceptions.
In other cases, and in particular for a long-lived application, the message might be an indication that the application is unintentionally holding references to objects, and this prevents the objects from being garbage collected. This is the Java language equivalent of a memory leak. Note: The APIs that are called by an application could also be unintentionally holding object references.
One other potential source of this error arises with applications that make excessive use of finalizers. If a class has a finalize method, then objects of that type do not have their space reclaimed at garbage collection time. Instead, after garbage collection, the objects are queued for finalization, which occurs at a later time. In the Oracle Sun implementation, finalizers are executed by a daemon thread that services the finalization queue. If the finalizer thread cannot keep up, with the finalization queue, then the Java heap could fill up and this type of OutOfMemoryError exception would be thrown. One scenario that can cause this situation is when an application creates high-priority threads that cause the finalization queue to increase at a rate that is faster than the rate at which the finalizer thread is servicing that queue.
If this type of the OutOfMemoryError exception is thrown, you might need to use troubleshooting utilities on the operating system to diagnose the issue further. For more information about tools available for various operating systems, see Native Operating System Tools.
CompressedClassSpaceSize of 4294967296 is invalid; must be between 1048576 and 3221225472.
Note: There is more than one kind of class metadata — klass metadata and other metadata. Only klass metadata is stored in the space bounded by CompressedClassSpaceSize . The other metadata is stored in Metaspace .
Русские Блоги
Итак, обычно есть две причины этой аномалии:
1. В программе есть бесконечный цикл.
2. Программа занимает слишком много памяти, что превышает максимальное значение, установленное кучей JVM.
В первом случае вам необходимо самостоятельно проверить программный код, поэтому я не буду здесь говорить больше.
Во втором случае мы вручную расширяем настройки параметров кучи JVM. Настройка кучи JVM относится к настройке пространства памяти, которое JVM может выделить и использовать во время выполнения программы java. Когда JVM запускается, куча JVM автоматически устанавливает значение размера кучи. Обычно значение по умолчанию для начального пространства (например, -Xms) составляет 1/64 физической памяти, а максимальное пространство составляет 1/4 физической памяти. Его можно установить с помощью таких параметров, как -Xmn -Xms -Xmx, предоставляемых JVM. Вот объяснение значения каждого параметра:
-Xms: начальное значение
-Xmx: максимум
-Xmn: минимальное значение
Размер кучи не должен быть слишком маленьким или слишком большим. Если параметр слишком мал, скорость отклика программы будет ниже, потому что сборщик мусора занимает больше времени, а приложение выделяет меньше времени на выполнение. Слишком большой размер также приведет к потере места и повлияет на нормальную работу других программ. Размер кучи не должен превышать 80% доступной физической памяти. Рекомендуется установить одинаковые параметры -Xms и -Xmx, а -Xmn составляет 1/4 значения -Xmx.
Основные методы настройки следующие:
1. Этот параметр добавляется при выполнении файла класса JAVA, где className — это имя класса, который необходимо выполнить. (Включая имя пакета) Например: java -Xms32m -Xmx800m className Это не только решает проблему, но и скорость выполнения намного выше, чем когда она не установлена. Если это тест разработки, вы также можете установить его прямо в eclipse. Введите -Xms32m -Xmx800m в аргументы виртуальной машины в Eclipse -> run -arguments.
2. Вы можете изменить системные переменные среды в Windows и добавить JAVA_OPTS = -Xms64m -Xmx512m.
3. Если вы используете tomcat под окнами, вы можете добавить в C: tomcat5.5.9 bin catalina.bat (конкретный путь зависит от местоположения вашего tomcat): установить JAVA_OPTS = -Xms64m -Xmx256m (размер зависит от вашей собственной памяти) Местоположение: rem Угадайте CATALINA_HOME, если не определено Добавьте соответствующее в этой строке.
4. Если это система Linux, добавьте набор JAVA_OPTS = ’- Xms64 -Xmx512’ перед /bin/catalina.sh
Поскольку программе необходимо прочитать около 10 Вт строк записей из данных для обработки, возникает ошибка типа java.lang.OutOfMemoryError: пространство кучи Java появляется при чтении 9 Вт.
Проверка в Интернете может быть причиной того, что параметр стека JAVA слишком мал.
Согласно ответам в Интернете, существует примерно два решения:
1. Задайте переменные среды.
set JAVA_OPTS= -Xms32m -Xmx512m
можно изменить в соответствии с объемом памяти вашего компьютера, но моя проверка этого метода не решила проблему. Это может быть где еще нужно установить.
2、java -Xms32m -Xmx800m className
— добавить этот параметр при выполнении файла класса JAVA, где className — это фактическое имя класса, который должен быть выполнен. (Включая название пакета)
Это решает проблему. И скорость выполнения намного выше, чем без настройки.
Если вы можете использовать Eclispe при тестировании, вам необходимо ввести параметр -Xms32m -Xmx800m в аргументы виртуальной машины в Eclipse -> run -arguments.
java.lang.OutOfMemoryError: Java heap space
Исключение возникает при использовании программы Java для запроса большого количества данных из базы данных:
java.lang.OutOfMemoryError: Java heap space
В JVM, если 98% времени используется для сборки мусора, а доступный размер кучи меньше 2%, будет выдано это сообщение об исключении.
Настройка кучи JVM относится к настройке пространства памяти, которое JVM может выделить и использовать во время выполнения программы java.
JVM автоматически установит значение размера кучи при запуске.Его начальное пространство (-Xms) составляет 1/64 физической памяти, а максимальное пространство (-Xmx) — 1/4 физической памяти. Его можно установить с помощью таких параметров, как -Xmn -Xms -Xmx, предоставляемых JVM.
Например: java -jar -Xmn16m -Xms64m -Xmx128m MyApp.jar
Если размер кучи установлен слишком маленьким, в дополнение к этим аномальным сообщениям вы обнаружите, что скорость отклика программы снижается. Сборщик мусора занимает больше времени, а приложение выделяет меньше времени на выполнение.
Размер кучи не должен превышать 80% доступной физической памяти.Обычно для параметров -Xms и -Xmx должны быть установлены одинаковые значения, а -Xmn составляет 1/4 значения -Xmx.
Параметры размера кучи -Xms -Xmn не должны превышать размер физической памяти. В противном случае появится сообщение «Ошибка при инициализации виртуальной машины. Не удалось зарезервировать достаточно места для кучи объектов».
==========================================================
После ночи напряженной работы я наконец завершил программу замены файлов для указанной строки, но поскольку я хочу заменить слишком много файлов html для общесайтовой программы, поэтому затмение всегда заканчивается в каталоге После сообщения об исключении java.lang.OutOfMemoryError: пространство кучи Java произошел сбой.
Я подумал, что слишком поздно перерабатывать из-за частых операций, поэтому я добавил Thread.sleep (1000) после каждого цикла и обнаружил, что он умрет в этом каталоге, поэтому я изменил 1000 на 5000 или умер там. Я думаю, что это может быть не так просто перерабатывать, возможно, JVM Sun просто не выпускает для этой ситуации.
Затем я добавил -Xmx256M к параметру запуска, на этот раз все было нормально.
Подумав об этом, я до сих пор мало что знаю о принципах сборки мусора, я проверил это в Интернете и нашел несколько хороших статей.
Также существуют: Управление кучей Java — сборка мусора. Следует отметить следующие моменты, которые могут использоваться в качестве рекомендаций при написании программ:
(1) Не пытайтесь предполагать время, когда происходит сборка мусора, причем все это неизвестно. Например, временный объект в методе становится бесполезным после вызова метода, и его память может быть освобождена в это время.
(2) Java предоставляет несколько классов, которые занимаются сборкой мусора, и предоставляет способ принудительного вызова функции сборки мусора System.gc (), но это также ненадежный метод. Java не гарантирует, что сборка мусора будет запускаться каждый раз при вызове этого метода. Она просто отправляет такой запрос в JVM. Неизвестно, выполняется ли сборка мусора на самом деле.
(3) Выберите подходящий вам сборщик мусора. Вообще говоря, если система не предъявляет особых требований к производительности, вы можете использовать параметры JVM по умолчанию. В противном случае вы можете рассмотреть возможность использования целевых сборщиков мусора.Например, инкрементные сборщики больше подходят для систем с высокими требованиями к работе в реальном времени. Система имеет более высокую конфигурацию и больше простаивающих ресурсов, вы можете рассмотреть возможность использования параллельного сборщика меток / разверток.
(4) Ключевая и сложная проблема — это утечки памяти. Хорошие навыки программирования и строгое отношение к программированию всегда являются самыми важными. Не позволяйте небольшой собственной ошибке вызвать большую дыру в памяти.
(5) Освободите ссылки на бесполезные объекты как можно скорее.
Когда большинство программистов используют временные переменные, они автоматически устанавливают для ссылочной переменной значение null после выхода из активной области (области), что означает, что сборщик мусора будет собирать объект. Вы должны обратить внимание на то, отслеживается ли объект, на который указывает ссылка, если да, удалите прослушиватель, а затем назначьте нулевое значение.
Другими словами, лучше контролировать операции частого обращения к памяти и освобождения памяти самостоятельно, но метод System.gc () может быть неприменим. Лучше использовать finalize для принудительного выполнения или написать свой собственный метод finalize.
Я обнаружил ошибку TOMCAT: java.lang.OutOfMemoryError: пространство кучи Java, поэтому я проверил информацию и нашел решение:
If Java runs out of memory, the following error occurs:
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
Java heap size can be increased as follows:
java -Xms -Xmx
Defaults are:
java -Xms32m -Xmx128m
Если вы используете выигрыш
/tomcat/bin/catalina.bat плюс следующая команда:
set JAVA_OPTS=-Xms32m -Xmx256m
Если вы используете unix / linux
/tomcat/bin/catalina.sh плюс следующая команда:
JAVA_OPTS=»-Xms32m -Xmx256m»
инструмент просмотра и анализа памяти jvm
В отрасли существует множество мощных инструментов для профилей Java, таких как Jporfiler и yourkit. Я не хочу говорить об этих платных вещах. Я хочу сказать, что сама java обеспечивает большой мониторинг памяти. Маленькие инструменты, перечисленные ниже инструменты — лишь небольшая часть. Все еще довольно интересно внимательно изучить инструменты jdk 🙂
1: вывод журнала gc
-verbose: gc и -XX: + PrintTenuringDistribution и т. д.
Код коллекции HTML-кода
Usage:
jmap -histo (to connect to running process and print histogram of java object heap
jmap -dump: (to connect to running process and dump java heap)
dump-options: format=b binary default file=
dump heap to
Example: jmap -dump:format=b,file=heap.bin
jmap -dump:file=c:dump.txt 340
Обратите внимание, что 340 — это pid java-процесса моей машины. Размер выгруженного файла превышает 10 мегабайт, и я только что открыл tomcat и запустил очень простое приложение без какого-либо доступа. Его можно представить на большом и загруженном сервере. , Насколько большим должен быть файл дампа? Что вам нужно знать, так это то, что информация о файле дампа очень примитивна и определенно не подходит для просмотра людьми напрямую, а содержимое, отображаемое jmap -histo, слишком простое, например, оно только показывает, сколько памяти занимают определенные типы объектов и количество этих объектов. , Но нет более подробной информации, например, кто создал эти объекты. Итак, какая польза от файла дампа? Конечно полезно, потому что есть инструмент для анализа файла дампа памяти jvm.
6: анализатор памяти eclipse
S0 S1 E O P YGC YGCT FGC FGCT GCT
54.62 0.00 42.87 43.52 86.24 1792 5.093 33 7.670 12.763
S0 S1 E O P YGC YGCT FGC FGCT GCT
54.62 0.00 42.87 43.52 86.24 1792 5.093 33 7.670 12.763
S0: Зона susvivor0 нового поколения, коэффициент использования площадей 54 . 62%
S1: область susvivor1 нового поколения, коэффициент использования пространства составляет 0,00% (поскольку второй второстепенный сбор не был выполнен)
Важной частью инфраструктуры ЕГАИС является универсальный транспортный модуль (УТМ) через который идет все взаимодействие прикладного ПО с системой. С 1 июня 2021 года Росалкогольрегулирование требует обязательно перейти на УТМ 4.2.0, работа с более старыми версиями УТМ более невозможна. Несмотря на то, что версии УТМ под Linux давно существуют официальная документация обходит вопрос его установки и эксплуатации стороной. Поэтому будем устранять эту недоработку и поделимся собственным опытом, основанным на многолетней работе с УТМ именно на этой платформе.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Статья обновлена 27.12.2022
Начнем с грустного. У нас складывается впечатление, что в ФСРАР над ЕГАИС работают две совершенно разные команды, которые к тому же не знают о существовании друг друга. Чтобы получить дистрибутив УТМ официальным путем вам потребуется Windows и Internet Explorer, по другому попасть в личный кабинет ЕГАИС у вас не получится. Оттуда скачиваем актуальный пакет для платформы Linux, либо копируем ссылку, на текущий момент это УТМ 4.2.0 b2525 для Debian 7 / Debian 8 / Ubuntu 14.04 LTS. Пусть вас не смущают в описании пакета достаточно древние по меркам 2022 года дистрибутивы, УТМ прекрасно работает в актуальных версиях Linux, а по стабильности работы, по нашим собственным ощущениям, даже превосходит Windows-версию.
Подготовка сервера
К сожалению, УТМ для Linux продолжает существовать только в 32-разрядной версии, поэтому сразу включим поддержку мультиархитектуры (мы подразумеваем что вы используете 64-разрядный Linux):
dpkg --add-architecture i386
После чего обязательно обновим список пакетов:
apt update
Затем установим необходимые зависимости и пакеты для работы с аппаратными ключами:
apt install libc6:i386 libncurses5:i386 libstdc++6:i386 pcscd acl libpcsclite1:i386
Для управления службами УТМ требуется пакет supervisor:
apt install supervisor
И наконец библиотека libssl, которая реализует протоколы защищенного обмена данными TLS. В разных версиях дистрибутивов может присутствовать разная ее версия, поэтому для ее поиска рекомендуем воспользоваться ресурсами packages.debian.org и packages.ubuntu.com, задаете в поиске libssl и смотрите какая именно версия присутствует в вашем дистрибутиве.
Для Debian 10 и Ubuntu 20.04 LTS это libssl1.1, установим его:
apt install libssl1.1:i386
Переход с УТМ 3.0.8
Если вы переходите на УТМ 4.2.0 с предыдущей версии УТМ 3.0.8, то все требуемые зависимости у вас установлены и никаких подготовительных работ проводить не надо. Но вам потребуется принять все документы из старой версии УТМ, чтобы во входящих и исходящих ничего не было и приостановить на время обновления продажи алкоголя.
После этого удалим старый УТМ:
apt remove u-trans
Но после его удаления останется директория /opt/utm с базой данных УТМ. На всякий случай сохраним ее в архив:
tar -czf /opt/utm.tgz /opt/utm
А затем удалим рабочую директорию:
rm -rf /opt/utm
Еще раз напомним, перед всеми операциями по обновлению УТМ завершите текущий документооборот и убедитесь, что в УТМ нет необработанных сообщений.
Установка УТМ 4.2.0
Некоторое время назад у разработчиков УТМ был публичный репозиторий, сейчас его нет, по крайней мере о нем ничего не известно. Поэтому единственный вариант установки УТМ на сегодняшний день — это скачать пакет с официального сайта. Ниже будет дана последовательность команд для актуального на данный момент релиза. Перед этим перейдем в домашнюю директорию.
cd ~
wget http://egais.ru/files/u-trans-4.2.0-2525-i386.deb
После чего останется только установить скачанный пакет:
dpkg -i u-trans-4.2.0-2525-i386.deb
Важно! Если к серверу не подключен аппаратный ключ, то УТМ будет установлен с поддержкой JaCarta и изменить этот выбор будет можно только удалением и повторной установкой пакета. Поэтому, если вы используете Рутокен, то ключ должен быть вставлен в ПК перед установкой пакета.
Для проверки работы службы воспользуйтесь командой:
supervisorсtl status
![]()
Обратите внимание, что в УТМ 4.2.0 вместо трех служб осталась одна, управлять ею можно при помощи команд:
supervisorсtl start | stop | restart | status utm
Через некоторое время после запуска службы будет доступен веб-интерфейс, который использует порт 8080. По сравнению с предыдущей версией он получил значительно развитие и теперь это действительно полезный и удобный инструмент, в который перенесли многие возможности из личного кабинета. К наиболее востребованным можно отнести генерацию ключа доступа (перевыпуск RSA-сертификата) и повторный запрос документов ЕГАИС. Теперь для этого не нужно останавливать УТМ, извлекать ключ и идти искать Internet Explorer.
Также добавлен раздел техподдержки, что тоже очень важно, все, кто работал с ЕГАИС знают как там обстояли дела с поддержкой. Теперь же все сосредоточено в одном месте. Мы пока не можем сказать как работает этот инструмент, но начинание однозначно хорошее.
![]()
Обновление УТМ 4.2.0
Как уже было сказано выше, никаких репозиториев у четвертой версии УТМ нет и для обновления вам придется скачать и установить новую версию пакета вручную. Но если вы попытаетесь пойти привычным для пользователя Linux путем и установить новый пакет поверх старого, то вас ждет достаточно неприятный сюрприз. Программа не умеет обновлять собственную базу данных и увидев рабочий каталог предыдущей версии УТМ прекращает установку.
![]()
Поэтому завершите весь документооборот ЕГАИС, чтобы в УТМ не осталось непринятых документов, также убедитесь, что получены все подтверждения и ответы на запросы. Розничную продажу алкоголя на время обновления следует прекратить.
Затем остановим УТМ:
supervisorсtl stop utm
И переименуем рабочий каталог (напоминаем, в Linux за переименование и перемещение отвечает одна и та же команда:
mv /opt/utm /opt/utm_old
Для актуальных версий нужно установить дополнительную зависимость, сам пакет этого не умеет:
apt install acl
Теперь можем повторить процесс установки, обновление пакета пройдет нормально (в нашем случае обновляем УТМ на выпуск 2525):
dpkg -i u-trans-4.2.0-2525-i386.deb
После обновления вы можете столкнуться с тем, что на главной странице УТМ в разделе Основные параметры будет везде «Ошибка получения данных«.
В этом случае перейдите в раздел Настройки (значок с шестерней справа вверху) и выполните обновление настроек УТМ, после чего компьютер рекомендуется перезагрузить.
При этом следует отличать данную ситуацию от действительных ошибок работы УТМ, которые могут отражаться на главной странице, в последнем случае нужно будет заняться их анализом и исправлением.
Ошибка java.lang.OutOfMemoryError: Java heap space
Внешним проявлением этой ошибки является невозможность отправить либо получить документы из УТМ ЕГАИС, текст ошибки может быть разным и зависит от конкретной прикладной программы. Вторым симптомом является зависание или полный отказ работы веб-интерфейса УТМ. Если проанализировать логи, например, файл /var/log/utm-trans.out.log то мы найдем там следующее сообщение:
java.lang.OutOfMemoryError: Java heap space
Которое говорит о недостатке памяти для виртуальной машины Java.
Все существующие материалы по этой ошибке относятся к Windows версии УТМ и не могут помочь в случае использования Linux, поэтому решение пришлось искать самостоятельно. Откроем файл /opt/utm/transport/bin/transport.sh и сразу после строки:
exec "$JAVACMD" $JAVA_OPTS
Добавим строку:
-Xmx1024M -Xms768M
Которая установит минимальный и максимальный размер выделяемой памяти как 768 МБ и 1024 МБ, данные рекомендации взяты нами из официальных рекомендаций Oracle и проверены на практике, разработчики УТМ рекомендуют устанавливать 500 МБ и 1000 МБ. При этом убедитесь, что в системе достаточно свободной оперативной памяти.
После чего сохраните изменения в файле и перезапустите УТМ:
supervisorсtl restart utm
При необходимости выделяемое количество памяти следует откорректировать.
Пересборка пакета УТМ
При обновлении большого числа установленных транспортных модулей вы можете столкнуться с ситуацией, что вам придется заново вносить описанные выше изменения по выделению памяти, что безусловно, неудобно. Можно ли избежать дополнительной ручной работы? Конечно, можно, для этого внесем изменения прямо в deb-пакет. Выполнить описанные ниже действия можно на любой основанной на Debian системе, как с графической оболочкой, так и без.
В терминале перейдем в директорию со скачанным пакетом и распакуем его в папку u-trans:
dpkg -x u-trans-4.2.0-2525-i386.deb u-trans
Создадим внутри дополнительную директорию DEBIAN и извлечем туда служебные данные пакета:
mkdir u-trans/DEBIAN
dpkg -e u-trans-4.2.0-2525-i386.deb u-trans/DEBIAN
Теперь откроем u-trans/opt/utm/transport/bin/transport.sh и внесем в него нужные изменения.
Сохраняем изменения и заново собираем пакет:
dpkg -b u-trans u-trans-4.2.0-2525-mem-i386.deb
В команде указываем директорию с распакованным пакетом и желаемое название файла. Советуем задать имя нового пакета отличным от исходного, чтобы впоследствии не было путаницы. Всё, теперь можем обновлять наш парк транспортных модулей сразу с необходимыми настройками УТМ.
Как видим, установить новый УТМ 4.2.0 на платформе Linux достаточно несложно, а сам продукт серьезно развивается и предлагает множество новых функций и улучшений, будем надеяться, что все это будет работать так как задумано и существенно облегчит непростую работу с системой ЕГАИС.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
- Upto my knowledge, Heap space is occupied by instance variables only. If this is correct, then why this error occurred after running fine for sometime as space for instance variables are alloted at the time of object creation.
That means you are creating more objects in your application over a period of time continuously. New objects will be stored in heap memory and that’s the reason for growth in heap memory.
Heap not only contains instance variables. It will store all non-primitive data types ( Objects). These objects life time may be short (method block) or long (till the object is referenced in your application)
- Is there any way to increase the heap space?
Yes. Have a look at this oracle article for more details.
There are two parameters for setting the heap size:
-Xms:, which sets the initial and minimum heap size
-Xmx:, which sets the maximum heap size
- What changes should I made to my program so that It will grab less heap space?
It depends on your application.
-
Set the maximum heap memory as per your application requirement
-
Don’t cause memory leaks in your application
-
If you find memory leaks in your application, find the root cause with help of profiling tools like MAT, Visual VM , jconsole etc. Once you find the root cause, fix the leaks.
Important notes from oracle article
Cause: The detail message Java heap space indicates object could not be allocated in the Java heap. This error does not necessarily imply a memory leak.
Possible reasons:
- Improper configuration ( not allocating sufficiant memory)
- Application is unintentionally holding references to objects and this prevents the objects from being garbage collected
- Applications that make excessive use of finalizers. If a class has a finalize method, then objects of that type do not have their space reclaimed at garbage collection time. If the finalizer thread cannot keep up, with the finalization queue, then the Java heap could fill up and this type of OutOfMemoryError exception would be thrown.
On a different note, use better Garbage collection algorithms ( CMS or G1GC)
Have a look at this question for understanding G1GC
- Upto my knowledge, Heap space is occupied by instance variables only. If this is correct, then why this error occurred after running fine for sometime as space for instance variables are alloted at the time of object creation.
That means you are creating more objects in your application over a period of time continuously. New objects will be stored in heap memory and that’s the reason for growth in heap memory.
Heap not only contains instance variables. It will store all non-primitive data types ( Objects). These objects life time may be short (method block) or long (till the object is referenced in your application)
- Is there any way to increase the heap space?
Yes. Have a look at this oracle article for more details.
There are two parameters for setting the heap size:
-Xms:, which sets the initial and minimum heap size
-Xmx:, which sets the maximum heap size
- What changes should I made to my program so that It will grab less heap space?
It depends on your application.
-
Set the maximum heap memory as per your application requirement
-
Don’t cause memory leaks in your application
-
If you find memory leaks in your application, find the root cause with help of profiling tools like MAT, Visual VM , jconsole etc. Once you find the root cause, fix the leaks.
Important notes from oracle article
Cause: The detail message Java heap space indicates object could not be allocated in the Java heap. This error does not necessarily imply a memory leak.
Possible reasons:
- Improper configuration ( not allocating sufficiant memory)
- Application is unintentionally holding references to objects and this prevents the objects from being garbage collected
- Applications that make excessive use of finalizers. If a class has a finalize method, then objects of that type do not have their space reclaimed at garbage collection time. If the finalizer thread cannot keep up, with the finalization queue, then the Java heap could fill up and this type of OutOfMemoryError exception would be thrown.
On a different note, use better Garbage collection algorithms ( CMS or G1GC)
Have a look at this question for understanding G1GC
На чтение 4 мин. Опубликовано 15.12.2019
На новом компе (windows server 2008) постоянно выходит эта ошибка. Советами из гугла увеличить память -Xms16384M -Xmx16384M пробовала, через Java Runtime parameters пробовала, через JAVA_OPTS и CATALINA_OPTS пробовала, ничего не меняется, та же самая ошибка. Как исправить ситуацию?Опыта нет:)
Я пишу клиентское приложение Swing (графический дизайнер шрифтов) на Java 5 . В последнее время я сталкиваюсь с ошибкой java.lang.OutOfMemoryError: Java heap space , потому что я не консервативен в использовании памяти Пользователь может открывать неограниченное количество файлов, а программа сохраняет открытые объекты в памяти. После быстрого исследования я обнаружил эргономику в виртуальной машине Java 5.0 и другие, говоря, что на машине с Windows JVM по умолчанию устанавливает максимальный размер кучи как 64MB .
В этой ситуации, как мне справиться с этим ограничением?
Я мог бы увеличить максимальный размер кучи , используя опцию командной строки для java, но это требует выяснения доступной оперативной памяти и написания некоторой запускающей программы или скрипта. Кроме того, увеличение до некоторого конечного max не в конечном счете избавляет от проблемы.
Я мог бы переписать часть своего кода, чтобы часто сохранять объекты в файловой системе (использование базы данных — то же самое), чтобы освободить память. Это может сработать, но, вероятно, это тоже много работы.
Если бы вы могли указать мне на детали вышеупомянутых идей или некоторые альтернативы, такие как автоматическая виртуальная память, динамически расширяющая размер кучи , это было бы здорово.
18 ответов
В конечном итоге у вас всегда есть конечный максимум кучи для использования независимо от того, на какой платформе вы работаете. В Windows 32 бит это примерно 2GB (не куча, а общий объем памяти на процесс). Просто так получается, что Java решает уменьшить размер по умолчанию (предположительно, так, чтобы программист не мог создавать программы с распределенным выделением памяти, не сталкиваясь с этой проблемой и не проверяя, что именно они делают).
Таким образом, учитывая, что есть несколько подходов, которые вы можете использовать, чтобы определить, какой объем памяти вам нужен, или уменьшить объем используемой памяти. Одной из распространенных ошибок в языках сборки мусора, таких как Java или C #, является сохранение ссылок на объекты, которые вы больше не используете , или выделение множества объектов, когда вы можете использовать их вместо этого. Пока объекты имеют ссылку на них, они будут продолжать использовать пространство кучи, поскольку сборщик мусора не удалит их.
В этом случае вы можете использовать профилировщик памяти Java, чтобы определить, какие методы в вашей программе выделяют большое количество объектов, а затем определить, есть ли способ убедиться, что на них больше нет ссылок, или не выделять их в первое место. Одним из вариантов, который я использовал в прошлом, является «JMP» http://www.khelekore.org/jmp/ .
Если вы решите, что вы распределяете эти объекты по какой-то причине, и вам нужно хранить ссылки (в зависимости от того, что вы делаете, это может иметь место), вам просто нужно увеличить максимальный размер кучи, когда вы запускаете программа. Однако, как только вы выполните профилирование памяти и поймете, как распределяются ваши объекты, у вас должно быть лучшее представление о том, сколько памяти вам нужно.
В общем, если вы не можете гарантировать, что ваша программа будет работать в некотором конечном объеме памяти (возможно, в зависимости от размера ввода), вы всегда столкнетесь с этой проблемой. Только после исчерпания всего этого вам нужно будет изучить кэширование объектов на диск и т. Д. В этот момент у вас должна быть очень веская причина сказать «мне нужен Xgb памяти» для чего-то, и вы не сможете обойти это, улучшив ваши алгоритмы или шаблоны распределения памяти. Как правило, это будет иметь место только в случае алгоритмов, работающих с большими наборами данных (например, с базой данных или какой-либо программой научного анализа), и тогда становятся полезными такие методы, как кэширование и ввод-вывод в память.
Я в общем склеил всю музыку, которую хотел сделать фоновой, и вышло 315мб. Закинул в проект, и попытался с помощью запустить. Но не вышло( Код метода для проигрывания музыки:
Как это исправить? Пробовал увлеичить память, но мне ошибку выбивало, то ли памяти мало, то ли ещё что-то. Всего на компе 2гб ОЗУ.
2 ответа 2
Попробуйте увеличить размер хипа для jvm. Для этого в аргументах jvm укажите:
Параметр Xmx указывает максимальный размер занимаемый хипом, а Xms — начальный размер выделенный под хип.
Если используете IntelliJ Idea, то сделать это можно так: выбираете конфигурацию запуска и в поле VM Options прописываете данную строчку ( -Xmx1024m -Xms256m без java ).
В Eclipse: Run -> Run configuration -> вкладка arguments -> VM arguments