2016-07-19 9 views
0

Это сложно объяснить, а не надеяться на простой, простой ответ, но подумал, что это стоит того. Интересует то, что может замедлить длительную работу Python, которая взаимодействует с Java-приложением.Приложение замедляется с течением времени - Java + Python

У нас есть экземпляр Tomcat с довольно сложным и надежным webapp под названием Fedora Commons (не путать с Fedora OS), программное обеспечение для хранения цифровых объектов. Кроме того, у нас есть промежуточное ПО python, которое выполняет длинные фоновые задания с Celery. Одна конкретная работа - глобализация книги с более чем 400 страницами, где каждая страница книги имеет большой файл TIFF, затем несколько небольших файлов PDF, XML и метаданных. В течение 10-15 минут из этих файлов создаются производные, и они добавляются к одному объекту в Fedora.

Наша проблема: в процессе проглатывания одной книги, добавления файлов в цифровой объект в приложении Java Fedora Commons замедляется очень последовательно и предсказуемо, но я не могу понять, как и почему.

Я думал график скоростей глотать может помочь, возможно, это противоречит общей картины управления памятью, которая более опытных с Java может признать:

enter image description here

Верхний левый график синхронизации больших 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/мусора, хотя я тоже могу ошибаться.

Любая помощь или совет для копания в более ценится!

+0

- часть python работает на jvm через jython? или это отдельный процесс? если это последний, вы сначала должны определить, какая часть вашего всего оборудования замедляется, т. е. является ли это частью java или python. – the8472

+0

Попробуйте добавить Psi-Probe в экземпляр Tomcat Fedora Commons. Рассматривая только время выполнения задания, вы не можете сказать, какой компонент вашей установки Fedora Commons вызывает замедление. Проблемой могут быть Fedora, gSearch, Solr или Djatoka. Добавив Psi-Probe, вы сможете проверить производительность на уровне сервлета и лучше определить проблему. https://psi-probe.github.io/psi-probe/ –

+0

Это замечательно, спасибо @RickSarvas! Я признаю, что многие из этих компонентов идут рука об руку с Islandora, которые мы не используем. Но Psi-Probe звучит достаточно хорошо для Tomcat, что это может быть очень полезно. Цените предложение. – ghukill

ответ

0

Спасибо всем за предложения по анализу GC и Tomcat. Оказывается, замедление было полностью связано с тем, как Fedora Commons строит цифровые объекты. Я смог выделить это, создав чрезвычайно простой цифровой объект, итеративно добавляя потоки данных нулевого размера и наблюдая за прогрессом.Вы можете увидеть это на графике ниже:

graph of adding datastreams

Кривая замедления как почти идентичной, который предложил это было не наш конкретный метод употребляет или размерами файлов. Кроме того, я попросил меня вернуться к old forum posts about Fedora Commons, которые подтверждают, что отдельные объекты не предназначены для большого количества потоков данных.

Возможно, интересно, как это знание было запутано за интеллектуальную организацию цифровых объектов, а не конкретно производительность, которую вы используете с Fedora, но это, вероятно, корм для другого форума.

Еще раз спасибо за предложения - если ничего другого, нормальное использование Fedora тонко настраивается и напевает лучше, чем раньше.

-1

Ну, вместо того, чтобы заглядывать в неясные настройки GC, вы можете явно начать управлять памятью, поэтому GC не сильно влияет на ваше выполнение.

+0

Когда вы говорите «явное управление памятью», вы имеете в виду в коде Java? Не имеет возможности редактировать/обновлять код Fedora Commons, хотя у нас есть доступ к коду Python. – ghukill

+0

Да, я говорил о Java, но вы также можете взглянуть на свои распределения Python. Как сказал puhlen, вы также должны посмотреть на несколько других показателей: загрузку процессора, использование памяти и т. Д. Без этого трудно дать рекомендации. –

0

Вы говорите, что подозреваете GC как проблему, но вы не показываете GC-метрики. Поместите свою программу через профилировщик и посмотрите, почему GC перегружен. Трудно решить проблему без определения причины.

Как только у вас есть проблема, в которой проблема, скорее всего, вам нужно будет изменить код, а не просто настроить настройки GC.

+0

Цените предложение - я посмотрю, что я могу сделать до профилирования. Я наблюдал за журналами GCC и видел много «призывов», которые, как я думал, могут означать «незначительные» GC, но не многие крупные. Но согласились, результаты профилирования помогли бы (настройки GC Tomcat были из других профилировщиков и настройки их процесса подачи Fedora Commons). – ghukill

+0

К сожалению, большое количество вызовов GC довольно стандартно для кода Java, особенно в приложениях, которые не были оптимизированы для скорости, а для использования ресурсов. –

Смежные вопросы