Это сложно объяснить, а не надеяться на простой, простой ответ, но подумал, что это стоит того. Интересует то, что может замедлить длительную работу Python, которая взаимодействует с Java-приложением.Приложение замедляется с течением времени - Java + Python
У нас есть экземпляр Tomcat с довольно сложным и надежным webapp под названием Fedora Commons (не путать с Fedora OS), программное обеспечение для хранения цифровых объектов. Кроме того, у нас есть промежуточное ПО python, которое выполняет длинные фоновые задания с Celery. Одна конкретная работа - глобализация книги с более чем 400 страницами, где каждая страница книги имеет большой файл TIFF, затем несколько небольших файлов PDF, XML и метаданных. В течение 10-15 минут из этих файлов создаются производные, и они добавляются к одному объекту в Fedora.
Наша проблема: в процессе проглатывания одной книги, добавления файлов в цифровой объект в приложении Java Fedora Commons замедляется очень последовательно и предсказуемо, но я не могу понять, как и почему.
Я думал график скоростей глотать может помочь, возможно, это противоречит общей картины управления памятью, которая более опытных с Java может признать:
Верхний левый график синхронизации больших TIFFs , превращаясь в JP2, а затем попадает в Fedora Commons. В левом нижнем углу находятся очень маленькие XML-файлы, причем производные не производятся, а также попадают внутрь. Как вы можете видеть, наклон их кривой замедляется почти одинаково. Справа, эти два процесса связаны друг с другом.
Я по всему интернету пытаюсь узнать о сборке мусора в Java (GC), пробую разные конфигурации, но не сильно влияя на замедление. Если это помогает, вот некоторые конфигурации памяти мы передаем в Tomcat (где хвост, я считаю, в основном диагностики):
JAVA_OPTS='-server -Xms1g -Xmx1g -XX:+UseG1GC -XX:+DisableExplicitGC -XX:SurvivorRatio=10 -XX:TargetSurvivorRatio=90 -verbose:gc -Xloggc:/var/log/tomcat7/ggc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC'
Мы работаем с 12GB
оперативной памяти на этой виртуальной машине.
Я понимаю, что количество факторов, которые могут привести к такому поведению, извините за каламбур за пределами диаграмм. Но мы довольно долго работали с Fedora Commons и нашим промежуточным программным обеспечением Python и были в основном успешными. Это замедлит работу, и вы можете настроить свои часы, просто чувствуя подозрительность, связанную с сборкой Java/мусора, хотя я тоже могу ошибаться.
Любая помощь или совет для копания в более ценится!
- часть python работает на jvm через jython? или это отдельный процесс? если это последний, вы сначала должны определить, какая часть вашего всего оборудования замедляется, т. е. является ли это частью java или python. – the8472
Попробуйте добавить Psi-Probe в экземпляр Tomcat Fedora Commons. Рассматривая только время выполнения задания, вы не можете сказать, какой компонент вашей установки Fedora Commons вызывает замедление. Проблемой могут быть Fedora, gSearch, Solr или Djatoka. Добавив Psi-Probe, вы сможете проверить производительность на уровне сервлета и лучше определить проблему. https://psi-probe.github.io/psi-probe/ –
Это замечательно, спасибо @RickSarvas! Я признаю, что многие из этих компонентов идут рука об руку с Islandora, которые мы не используем. Но Psi-Probe звучит достаточно хорошо для Tomcat, что это может быть очень полезно. Цените предложение. – ghukill