Мы продолжаем сталкиваться с ошибкой java.lang.OutOfMemoryError: Java heap space
при запуске MetaMap (с Java API и оболочкой UIMA).
К сожалению, журналы не очень информативны, поэтому мы не знаем, на какой файл он тянет.
В прошлом у нас были проблемы с созданием MetaMap огромных круглых аннотаций, когда он встречал символ трубы (|
). Однако используемый нами набор файлов ( примечания MIMIC ) не содержит символов канала. Есть ли другие символы, которые могут проявлять поведение, аналогичное символу трубы?
Мы могли бы увеличить системную оперативную память, чтобы обойти проблему с пространством кучи (на самом деле она не может использовать максимальную установленную кучу, которая установлена в 6 ГБ, поскольку системная память ограничена), но мы бы предпочли знать, что вызывает проблема, тем более что размер выходного файла стал более управляемым.
* РЕДАКТИРОВАТЬ *
Просто для пояснения: мы увеличили ресурсы памяти для JVM, и это действительно помогает передавать данные (это было проверено на локальной ВМ). Проблема, с которой сталкивается MetaMap, заключается в том, что он создает огромные циклические аннотации, которые поглощают ресурсы JVM (а в нашей нынешней системе ОЗУ ОС не оптимальна).
Как отмечено в моем комментарии ниже, мы предварительно обрабатываем файлы, чтобы лишить их любых символов, которые выдают ошибки. Однако ошибка пространства кучи раздражает, поскольку, в отличие от других ошибок, с которыми мы сталкиваемся (например, пробелы, окружающие одиночный период, как в text . text
), они просто генерируют ошибку синтаксического анализа с текстом, который выдает ошибку. В случае символа канала мы нашли его, увеличив объем ОЗУ (на ВМ, на котором мы первоначально тестировали это), а затем посмотрев аннотации в средстве просмотра UIMA. Нам удалось идентифицировать проблемные файлы, поскольку размер выходного файла XMI с циклическими аннотациями огромен.
Мы снова запускаем некоторые тесты на ВМ, чтобы посмотреть, сможем ли мы определить проблему, но если у кого-то есть опыт работы с MetaMap, чтобы помочь нам определить какие-либо проблемные символы или последовательности символов, это было бы желательно.
* РЕДАКТИРОВАТЬ 2 *
Память не должна быть проблемой. Мы запускаем приложение, используя export JAVA_TOOL_OPTIONS='-Xms2G -Xmx6G -XX:MinHeapFreeRatio=25 -XX:+UseG1GC'
Существует фундаментальная проблема с круговыми аннотациями, которые мы пытаемся решить. Это поглощает ресурсы и рвет.