2016-05-11 17 views
7

Sau khi bật giao thức STOMP (trước khi nó chỉ là giao thức mặc định được kích hoạt) trên máy chủ Activemq, nó bắt đầu thất bại với oom. Tôi chỉ có 1 khách hàng sử dụng STOMP. Nó có thể hoạt động trong 1 tuần mà không thành công hoặc thất bại một ngày sau khi khởi động lại. Dưới đây là các tập tin cấu hình:activemq oom sau khi bật stomp

<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.xsd 
    http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> 

    <bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery" 
      lazy-init="false" scope="singleton" 
      init-method="start" destroy-method="stop"> 
    </bean> 

    <!-- 
     The <broker> element is used to configure the ActiveMQ broker. 
    --> 
    <broker useJmx="true" xmlns="http://activemq.apache.org/schema/core" brokerName="cms-mq" dataDirectory="${activemq.data}"> 

     <destinationInterceptors> 
      <virtualDestinationInterceptor> 
       <virtualDestinations> 
        <virtualTopic name="VirtualTopic.>" selectorAware="true"/> 
       </virtualDestinations> 
      </virtualDestinationInterceptor> 
     </destinationInterceptors> 

     <destinationPolicy> 
      <policyMap> 
       <policyEntries> 
       <policyEntry topic=">" producerFlowControl="false"> 
       </policyEntry> 
       <policyEntry queue=">" producerFlowControl="false"> 
       </policyEntry> 
       </policyEntries> 
      </policyMap> 
     </destinationPolicy> 

     <managementContext> 
      <managementContext createConnector="false"/> 
     </managementContext> 
     <persistenceAdapter> 
      <kahaDB directory="${activemq.data}/kahadb"/> 
     </persistenceAdapter> 
      <systemUsage> 
      <systemUsage> 
       <memoryUsage> 
        <memoryUsage percentOfJvmHeap="70" /> 
       </memoryUsage> 
       <storeUsage> 
        <storeUsage limit="4 gb"/> 
       </storeUsage> 
       <tempUsage> 
        <tempUsage limit="4 gb"/> 
       </tempUsage> 
      </systemUsage> 
     </systemUsage> 

     <transportConnectors> 
      <transportConnector name="auto" uri="auto+nio://0.0.0.0:61616?maximumConnections=1000&amp;auto.protocols=default,stomp"/> 
     </transportConnectors> 
     <shutdownHooks> 
      <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" /> 
     </shutdownHooks> 

     <plugins> 
      ... security plugins config... 
     </plugins> 

    </broker> 

    <import resource="jetty.xml"/> 

</beans> 

bắt đầu args:

/usr/java/default/bin/java -Xms256M -Xmx1G -Dorg.apache.activemq.UseDedicatedTaskRunner=false -XX:HeapDumpPath=/var/logs/heapDumps -XX:+HeapDumpOnOutOfMemoryError -Dcom.sun.management.jmxremote.port=8162 -Dcom.sun.management.jmxremote.rmi.port=8162 -Dcom.sun.management.jmxremote.password.file=/opt/apache-activemq-5.13.0//conf/jmx.password -Dcom.sun.management.jmxremote.access.file=/opt/apache-activemq-5.13.0//conf/jmx.access -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote -Djava.awt.headless=true -Djava.io.tmpdir=/opt/apache-activemq-5.13.0//tmp -Dactivemq.classpath=/opt/apache-activemq-5.13.0//conf:/opt/apache-activemq-5.13.0//../lib/ -Dactivemq.home=/opt/activemq -Dactivemq.base=/opt/activemq -Dactivemq.conf=/opt/apache-activemq-5.13.0//conf -Dactivemq.data=/opt/apache-activemq-5.13.0//data -jar /opt/activemq/bin/activemq.jar start 

UPD: Từ Eclipse MemoryAnalizer:

Leak Suspects 
247,036 instances of "org.apache.activemq.command.ActiveMQBytesMessage", loaded by "java.net.URLClassLoader @ 0xc02e9470" occupy 811,943,360 (76.92%) bytes. 

81 instances of "org.apache.activemq.broker.region.cursors.FilePendingMessageCursor", loaded by "java.net.URLClassLoader @ 0xc02e9470" occupy 146,604,368 (13.89%) bytes. 

UPD: Trước khi có lỗi oom có ​​một số lỗi trong đăng nhập như sau:

| ERROR | Could not accept connection from null: java.lang.IllegalStateException: Timer already cancelled. | org.apache.activemq.broker.TransportConnector | ActiveMQ BrokerService[cms-mq] Task-13707 
| INFO | The connection to 'null' is taking a long time to shutdown. | org.apache.activemq.broker.TransportConnection | ActiveMQ BrokerService[cms-mq] Task-13738 

Sẽ appriciate bất kỳ trợ giúp trong gỡ lỗi nó. Có thể cung cấp thêm thông tin nếu cần.

Trả lời

0

Tôi đã kiểm tra mã máy khách (máy khách stomp ruby) và hóa ra rằng có tiêu đề phụ 'activemq.subscriptionName' không có tiêu đề kết nối 'client-id'. Khi bạn đặt tiêu đề đăng ký 'activemq.subscriptionName' có nghĩa là bạn muốn người đăng ký bền. Nhưng bạn cũng nên đặt tiêu đề kết nối 'client-id' vì nếu không nó sẽ được tạo tự động. Khi tiêu đề 'client-id' không được thiết lập, chúng tôi có một tình huống mà trong đó nhà môi giới không thể xác định máy khách stomp bằng id máy khách khi nó kết nối lại. Kết quả là có rất nhiều người đăng ký và chủ đề Offline Durable Topic được xếp chồng lên nhau cho mỗi lỗi client-id => OOM.

2

Một dự đoán là bạn đang làm ngập nhà môi giới với các thông điệp từ nhà sản xuất trên STOMP và cuối cùng là thổi bộ nhớ người môi giới. Bạn đã tắt điều khiển luồng của nhà sản xuất, điều này có thể dẫn đến điều này với cả máy khách JMS mặc định và STOMP thậm chí còn dễ dàng xâm nhập vào tình huống này vì không có mặc định một ack quay lại nhà sản xuất để cho phép cơ chế điều khiển luồng , bạn phải yêu cầu biên lai trên mỗi lần gửi để nhận được điều đó.

Để gỡ lỗi này, bạn cần bắt đầu kiểm tra nhật ký môi giới và số liệu thống kê đích và sử dụng thông qua bảng điều khiển hoặc công cụ khác mà bạn chọn để xem trạng thái của nhà môi giới là gì.

+0

Tôi sẽ bật kiểm soát luồng của nhà sản xuất. Hãy xem nếu nó giúp – pomkine

+0

Turing trên kiểm soát dòng sản xuất chỉ giúp nếu bạn cũng sửa đổi các khách hàng STOMP để yêu cầu biên lai khi gửi. –

+0

Tôi quản lý để tái sản xuất OOM bằng cách kết nối và sau đó ngắt kết nối với máy khách stopm trong vòng lặp. Kích thước heap đã tăng lên cho đến OOM. Những gì nó chỉ ra? – pomkine

Các vấn đề liên quan