Пружинная загрузка с apache верблюдом и groovy без кучи памяти продолжает расти - PullRequest
2 голосов
/ 28 января 2020

У нас есть приложение с загрузочной пружиной, которое имеет API для интеграции со сторонними разработчиками. Для интеграции со сторонними производителями мы используем apache верблюд и groovy в качестве языка сценариев. Для верблюдов и верблюдов на основе XML мы используем ManufacturerTemplate. и контекст маршрута. В контексте маршрута мы использовали groovy для некоторых манипуляций.

Но после нескольких дней работы мы заметили, что объем памяти без кучи продолжает увеличиваться. Вот снимок использования памяти без кучи

Затем мы взяли статистику этого процесса, связанную с памятью, и обнаружили, что существует множество groovy / lang / GroovyClassLoader@0x0000000100a32e10. Некоторые из них живы и некоторые из них мертвы. Их тысячи.

class_loader        classes   bytes     parent_loader           alive?  type
<bootstrap>           3417    5835717   null                    live    <internal>
0x0000000081b805b8      1       1471      null                  dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000082d2ced0      15      40146   0x0000000082d2cf48      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000082c3d2c0      1       1474    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000082d3d6d0      13      35357   0x0000000082d3d748      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000083158b10      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x00000000800cd800      120     316382  0x00000000800cd860      live    sun/misc/Launcher$AppClassLoader@0x000000010000f6a0
0x00000000833c5330      14      68990     null          live    org/codehaus/groovy/runtime/callsite/CallSiteClassLoader@0x0000000100a42750
0x0000000081f5e5f8      1       1471      null          dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000082ff86f0      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000082fbeae8      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x00000000833c3b28      1       1471    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000830f1f18      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000081e141c8      1       1474    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000082c3aee8      1       1474    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000833b6b10      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x00000000830e9b20      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x00000000ea687a58      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000080d928e8      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000083239b10      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x00000000833b4f08      11      26125   0x00000000833b4f80      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000083348300      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x00000000816dfd58      1       1471    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000830f2f38      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000082c39ef8      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000833c2700      1       1485    0x0000000082d2af08      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000816df150      1       1471      null          dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000080d91498      1       1473    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000082d3c690      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000082d49a90      12      34183   0x0000000082d49b08      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000083345b70      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x00000000833c2f78      1       1471    0x00000000833b8628      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000082fbdab0      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x00000000833b3f70      11      25942   0x00000000833b3fe8      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000082ef0ea0      1       1474    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x000000008309d758      11      26153   0x000000008309d7d0      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000082fbaaa8      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000082fb9a88      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000082fbce88      10      25290   0x0000000082fbcf00      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x00000000830deb78      10      25302   0x00000000830debf0      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x00000000830eab78      17      55775   0x00000000830eabf0      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x000000008308b770      13      34835   0x000000008308b7e8      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000082d35ea8      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000081b429c8      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000833c3f40      1       1471    0x00000000833b3f70      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000833c5b40      1       880       null          dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000082eee290      1       1471    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000830f4f70      11      26125   0x00000000830f4fe8      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x00000000833c43b8      1       1471    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000833c57b8      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000830ecb88      11      26110   0x00000000830ecc00      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000082ff8678      11      26153   0x0000000082ff86f0      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x000000008300eb88      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000083389fb0      11      26125   0x000000008338a028      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000080d92050      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000082fbea70      10      25290   0x0000000082fbeae8      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x00000000830f3f80      12      34459   0x00000000830f3ff8      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x00000000833c33a8      1       1471    0x000000008334acb8      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000081b7fd20      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000816dc5f0      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000081b42518      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000833c6790      1       1473    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000081b80108      1       1474    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000080d91c68      1       880       null          dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x000000008299be28      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000081b42900      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000083079fb0      11      25942   0x000000008307a028      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x00000000833b4f80      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000082eeda50      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x000000008299b658      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000831ae3d8      11      26110   0x00000000831ae450      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000082fbda38      10      25290   0x0000000082fbdab0      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000081f5e530      1       1471    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000830ebbc8      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000081b80970      1       878       null          dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000082d34618      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000082d3c618      10      25290   0x0000000082d3c690      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000082fbaa30      11      26153   0x0000000082fbaaa8      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x00000000833c3bf0      1       880       null          dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000833b3fe8      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000082eede38      1       892     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000830edbd8      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x000000008299ba40      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x000000008309d7d0      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x000000008308b7e8      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000080d92438      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000081e14100      1       1474    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000082d35e30      10      25292   0x0000000082d35ea8      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x00000000816df588      1       1497    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000830f4fe8      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000082fb9a10      11      26153   0x0000000082fb9a88      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x00000000ea686a98      11      26153   0x00000000ea686b10      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x00000000833c4bc8      15      72430   0x00000000800cc640      live    org/codehaus/groovy/runtime/callsite/CallSiteClassLoader@0x0000000100a42750
0x00000000830f3ff8      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x000000008300eff8      1       880       null          dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000ea683290      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x00000000804938b0      0       0       0x00000000800cd800      live    java/util/ResourceBundle$RBClassLoader@0x000000010005ef58
0x0000000080d92820      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000831b07e0      14      32627   0x00000000831b0858      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x000000008323abd8      11      26110   0x000000008323ac50      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x000000008334bbc8      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x00000000830debf0      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000082d39380      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000082d3f780      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x00000000830dfe58      11      25944   0x00000000830dfed0      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000083116a48      11      26153   0x0000000083116ac0      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x00000000831af640      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x00000000833c3a60      1       1471    0x00000000831750f8      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000833c5258      12      67191     null          live    org/codehaus/groovy/runtime/callsite/CallSiteClassLoader@0x0000000100a42750
0x00000000830e9aa8      10      25290   0x00000000830e9b20      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x00000000829f5738      0       0       0x00000000800cc640      live    groovy/text/markup/MarkupTemplateEngine$TemplateGroovyClassLoader@0x0000000100a332a8
0x00000000830f1ea0      11      26110   0x00000000830f1f18      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x000000008309b6b8      0       0       0x00000000800cc640      live    groovy/lang/GroovyClassLoader@0x0000000100a32e10
0x0000000082c3d770      1       1474    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x00000000833c5e88      1       1471    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000082eee358      1       881     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000080d91560      1       1473    0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x000000008299b720      1       880     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8
0x0000000083239a98      14      32627   0x0000000083239b10      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000083348288      11      26110   0x0000000083348300      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x0000000082d5fb68      16      49041   0x0000000082d5fbe0      live    groovy/lang/GroovyClassLoader$InnerLoader@0x0000000100ba9e58
0x000000008300eac0      1       881     0x00000000800cc640      dead    sun/reflect/DelegatingClassLoader@0x0000000100009df8

................................................................................................................................
................................................................................................................................
................................................................................................................................

**total = 13675 90164 204988152 N/A alive=1, dead=13674 N/A**

После работы в течение нескольких дней использование памяти без кучи превышает 1 ГБ, приложение зависает и не может ответить. Затем мы перезапускаем приложение, и это явление повторяется.

Что может быть причиной такого высокого использования памяти без кучи? Есть ли что-то еще, чтобы смягчить это?

Обновление:

Добавлены зависимости в файле build.gradle для верблюда:

compile("org.apache.camel:camel-spring-boot-starter:2.21.2")
compile("org.apache.camel:camel-script:2.21.2")
compile("org.apache.camel:camel-groovy:2.21.2")
compile("org.apache.camel:camel-xstream:2.21.2")
compile("org.apache.camel:camel-jackson:2.21.2")    
compile("org.apache.camel:camel-jdbc:2.21.2")
compile("org.apache.camel:camel-jpa:2.21.2")
compile("org.apache.camel:camel-http:2.21.2")

При запуске весенняя загрузка нашего приложения импортирует файл camel_config. xml.

@ImportResource(locations = "../camel_config.xml}")

Содержимое контекста конфигурации верблюда:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

<import resource="classpath:../ref_route.xml"/>

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <propertyPlaceholder
            id="properties"
            location="classpath:application.properties"/>

    <routeContextRef ref="ref_route"/>

</camelContext>

Вызов с сервисного уровня на верблюда:

LinkedHashMap<String, String> response = producerTemplate.requestBodyAndHeaders("direct:ref_route", body, headers, LinkedHashMap.class);

файл контекста верблюжьего маршрута: ref_route. xml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...