- Я разработал веб-сервис для анализа документов
- Этот веб-сервис читает документы txt и pdf.
- Для чтения pdf-файлов я использую библиотеку Java, разработанную моим научным руководителем.
- Я использую Java 7.
- В настоящее время я развертываю его на Tomcat v7.0.
- Если я создаю военный файл из своего приложения и размещаю его на локальном сервере Tomcat на своем ПК, или если я запускаю свое приложение на Tomcat через eclipse ee, чтение PDF-файла не вызывает проблем.
- Я настроил себе небольшой сервер (не самое лучшее оборудование, двухъядерный процессор, 4 ГБ оперативной памяти), установил Tomcat, Java и все остальное, что казалось необходимо мне.
- Когда я теперь развертываю военный файл на серверах Tomcat с помощью менеджера Tomcat, все работает нормально, пока я не пытаюсь разрешить приложению читать PDF-файл.
- После того, как приложение прочитало несколько страниц, я получаю сообщение об ошибке, что CodeCache переполнен и из-за этого отключена компиляция.
Пример вывода ошибки при импорте PDF
Этот журнал показывает, как импортируется PDF-файл, и в какой-то момент появляются сообщения об ошибках. Я выделил сообщение об ошибке жирным шрифтом.
...
31 мая 2012 г., 11:15:40 infovis.structure.pdf.PDFImport процесс INFO:
Обработка, страница 13
31 мая 2012 г., 11:15:40 infovis.structure.pdf.PDFIИмпорт процесса INFO: обработка, страница 14
31 мая 2012 г., 11:15:41 infovis.structure.pdf.PDFIПроцесс импорта INFO: обработка страницы 15
Код: Выделить всё
Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled. Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize= Code Cache [0x00007fa43437e000, 0x00007fa4347fe000, 0x00007fa43737e000) total_blobs=1858 nmethods=1318 adapters=490 free_code_cache=44631Kb largest_free_block=45618688 Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled. Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize= Code Cache [0x00007fa43437e000, 0x00007fa4347fe000, 0x00007fa43737e000) total_blobs=1859 nmethods=1318 adapters=490 free_code_cache=44631Kb largest_free_block=4561868831 мая 2012 г., 11:16:19 infovis.structure.pdf.PDFIПроцесс импорта ИНФОРМАЦИЯ: Обработка Страница 16
31 мая 2012 г., 11:16:20 infovis.structure.pdf.PDFIПроцесс импорта ИНФОРМАЦИЯ: обработка Страница 17
Код: Выделить всё
Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled. Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize= Code Cache [0x00007fa43437e000, 0x00007fa4347fe000, 0x00007fa43737e000) total_blobs=1860 nmethods=1318 adapters=490 free_code_cache=44630Kb largest_free_block=45618688 May 31, 2012 11:17:07 AM infovis.structure.pdf.PDFImport process INFO: Processing Page 18 Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled. Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize= Code Cache [0x00007fa43437e000, 0x00007fa4347fe000, 0x00007fa43737e000) total_blobs=1861 nmethods=1318 adapters=490 free_code_cache=44633Kb largest_free_block=45618688и так далее...
Что я уже пробовал< /p>
Я пытался изменить размеры кэша в конфигурации tomcat на своем сервере (я не очень хорошо разбираюсь в оболочке Linux). Я попытался увеличить размер CodeCache, а также размер других кешей, но проблема все еще возникает. Я проверил свой код на предмет возможных утечек, но пока не нашел их (помните, если я запущу его через eclipse, я не получу это сообщение, поэтому это может указывать на проблему с конфигурацией tomcat(?)). Я также попытался установить параметр «UseCodeCacheFlushing», который должен принудительно очищать кэш кода, когда он заполняется, но почему-то это не влияет на сбой приложений.
Мой конфигурация сервера tomcat
Я читал, что размер CodeCache по умолчанию составляет 32 МБ или 64 МБ, если это 64-битное приложение. Я попробовал зарезервировать 512 МБ (может быть, я что-то не так сделал в конфигурации?), но проблема, конечно, повторилась.
Вы можете передать параметры запуска JVM в Java здесь . Если они не установлены, параметры
по умолчанию будут следующими: -Djava.awt.headless=true -Xmx128m
-XX:+UseConcMarkSweepGC
Использовать "-XX:+UseConcMarkSweepGC ", чтобы включить сборщик мусора CMS
(уменьшение времени отклика). Если вы используете этот параметр и запускаете Tomcat на
машине с ровно одним процессором, содержащим одно или два ядра,
вам также следует добавить параметр «-XX:+CMSIncrementalMode».
JAVA_OPTS="-Djava.awt.headless=true -Xmx3g -Xms2g -XX:+UseCodeCacheFlushing -XX:+UseG1GC -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=512m"
Мои мысли по этому поводу
В ходе исследования я обнаружил несколько замечаний о том, что проблемы, связанные с CodeCache, могут указывать на память проблемы утечки, когда происходит программный сбой, в результате которого сборщик мусора не может очистить кеш.
Это может возможно, но, к сожалению, у меня нет источника код библиотеки, в которой я читаю pdf. Но с другой стороны, у меня нет проблем с чтением 650-страничного PDF-файла на моем настольном компьютере на локальном Tomcat (четырехъядерный процессор, 4x3,0 ГГц, а также 4 ГБ оперативной памяти), и это меня смущает.
Может быть, это просто проблема кота, которую можно решить, если я использую для развертывания другой сервер, например glassfish?
Может ли кто-нибудь мне помочь или предоставить какие-либо идеи или предложения? Может я какую-то настройку неправильно сделал? У меня не так уж много опыта работы с tomcat или другими серверами, поэтому любая помощь приветствуется.
Большое спасибо за каждый ответ и мысль, которой вы со мной делитесь.
Большое спасибо за каждый ответ и мысль, которой вы делитесь со мной.
Большое спасибо за каждый ответ и мысль, которой вы делитесь со мной.
п>
Подробнее здесь: https://stackoverflow.com/questions/108 ... n-disabled
Мобильная версия