Сообщение об ошибке «Выделение памяти не удалось» из базы данных Wakanda - PullRequest
0 голосов
/ 24 июня 2019

У нас есть веб-приложение, которое собирает данные с фрезерных станков. Подключено несколько машин, и в день собирается от 2000 до 3000 записей машинных данных. Время от времени случается так, что сервер или база данных просто останавливаются, и больше новые данные не могут быть записаны в базу данных. Если затем выполняется запрос данных, сервер Wakanda возвращает сообщение об ошибке:

{"__ERROR":[{"message":"Memory allocation failed","componentSignature":"xbox","errCode":100},{"message":"Cannot load page for index UnixDay.ID of database models","componentSignature":"dbmg","errCode":1076},{"message":"Cannot complete scan on index UnixDay.ID of database models","componentSignature":"dbmg","errCode":1081},{"message":"Query cannot be completed","componentSignature":"dbmg","errCode":1200},{"message":"Query cannot be completed","componentSignature":"dbmg","errCode":1200},{"message":"Query cannot be completed","componentSignature":"dbmg","errCode":1200}]}

У нас есть два местоположения, и мы используем независимый сервер Wakanda в каждом месте. Модель базы данных и основа кода для классов данных идентичны в обоих местах. Однако описанная выше проблема возникает только в одном месте, и у нас никогда не было такой проблемы во втором месте. Там сервер или база данных работают без ошибок несколько недель.

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

BACKEND {"ErrorText":"List of deleted records is invalid","ErrorNumber":18,"ProblemType":5,"ErrorLevel":2,"ProblemTypeText":"Problem on the {TableName} data table","TableNum":35,"TableName":"ProductionOrder"}
BACKEND {"ErrorText":"The chained list of deleted records is invalid","ErrorNumber":54,"ProblemType":5,"ErrorLevel":2,"ProblemTypeText":"Problem on the {TableName} data table","TableNum":2,"TableName":"BaseDate"}

В большинстве случаев проблема возникает через 2-3 дня. Если база данных была повреждена (ошибка, как показано выше во втором блоке кода), необходимо выполнить восстановление базы данных, а затем все снова в порядке. Он также создаст новый файл .waIndex и запустится снова в течение нескольких дней.

Существуют ли определенные комбинации хост-сервера (стандарт Windows Server 2012 R2), которые могут вызвать такое поведение? Что стоит за "componentSignature": "xbox"? Означает ли это, что Wakanda использует библиотеки Microsoft Xbox? Когда я ищу сообщение об ошибке, ответы всегда относятся к проблемам с библиотеками Xbox.

Я ценю любой совет, это довольно постоянная проблема.

1 Ответ

0 голосов
/ 02 июля 2019

Я обнаружил проблему и смог ее исправить.

Причиной является конфигурация памяти для всего решения (settings.waSettings). Если значение доступной памяти слишком мало, со временем память истощится. Если большая часть данных будет обработана и сохранена, то рано или поздно память будет заполнена, и сервер Wakanda не сможет больше открыть файл хранения данных или индексный файл или не сможет правильно завершить процесс записи. В этом случае система остановится с сообщением об ошибке, описанным выше. Если операция записи не может быть завершена полностью, в файле хранения данных возникнут несоответствия, и база данных будет повреждена. Это нужно исправить в первую очередь, иначе сервер Wakanda не запустится вообще. Теперь я установил фиксированный объем памяти и выделил серверу Wakanda 8 ГБ памяти. Это оставляет достаточно места для обработки данных, и производительность улучшается при увеличении объема памяти. Сохранение данных в базе данных было ускорено в 5-6 раз в некоторых случаях. Это позволяет серверу также лучше справляться с освобождением занятой памяти. Если память слишком мала, то у нее тоже есть проблемы, и ей не всегда удается достаточно памяти, чтобы освободить снова, а затем весь сервер задыхается со временем.

На мой вопрос ответили.

...