activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Hellweek <bwins...@tfutures.com>
Subject Re: ActiveMQ thoughts
Date Wed, 12 Dec 2007 13:36:12 GMT

Thanks,

I was not sure where I should open the JIRA issue.  Will follow this issue
and retest once resolved.

nmittler wrote:
> 
> Appreciate your feedback and helping to identify this problem!  I've  
> captured this in a JIRA issue here:
> 
> https://issues.apache.org/activemq/browse/AMQCPP-157
> 
> We'll do our best to get this resolved soon!
> 
> Regards,
> Nate
> 
> On Dec 11, 2007, at 9:10 AM, Hellweek wrote:
> 
>>
>> As promised I have created a c++ test program (TestProducerBug) that  
>> will
>> create up to X producers. The class that does the work is
>> (TestProducers.cpp).
>>
>> I am created a C# test program (TestConsumerBugCSharp) that will  
>> create up
>> to X consumers using a MessageListener.  The class that does the  
>> work is
>> (TestConsumers.cs).
>>
>> I have created a C++ test program (TestConsumerBug) that will create  
>> up to X
>> consumers.  The class that does the work(TestConsumers.cpp).
>>
>> Here is some information on my setup.
>>
>> Compiler MS 2005.
>>
>> ActiveMQ
>> Running ActiveMQ 5.0 Dated Dec 7th 2007.  It is running on windows  
>> 2003
>> Server 64 Bit.
>> Running Java 1.6.0_02 this version of Java is 64 bit. (Problem  
>> happens even
>> on a 32 bit version of JAVA).
>>
>> ActiveMQ Settings
>> Broker Settings (persistent="false" advisorySupport="false")
>>
>> Topic Policy
>> <policyEntry topic="Test.>" producerFlowControl="true">
>>
>>            <!-- lets force old messages to be discarded for slow  
>> consumers
>> -->
>>            <pendingMessageLimitStrategy>
>>              <constantPendingMessageLimitStrategy limit="5"/>
>>            </pendingMessageLimitStrategy>
>>  <messageEvictionStrategy>
>>  <oldestMessageEvictionStrategy />
>>  </messageEvictionStrategy>
>>
>>          </policyEntry>
>>
>>
>> Client API's
>>
>> CPP activemq-cpp-2.1.2-src
>> C# ApacheActiveMQ (Not sure the version but latest trunk).
>>
>>
>> When running these test remember to stop and restart the broker each  
>> test as
>> the test can and will cause the broker to hang.
>>
>> Tests 1 -3 will show what is happening between the CPP and C# API.
>>
>> Test 4 will show what happens to a producer when a consumer is in a  
>> break
>> point in the MessageListener.
>>
>> Test 1
>> To recreate the issue build and run
>> TestProducerBug
>> TestConsumerBugCSharp.
>>
>> If you set the number of producers and clients to 10 you should see  
>> the
>> problem happen in less then 5 min (About 2,000 messages per consumer).
>> The producer will throw an exception place a breakpoint on the catch  
>> block
>> in the ThreadProc.  you will see the following information.
>> No valid response received for command: Begin Class =  
>> ActiveMQBytesMessage
>>
>> Begin Class = ActiveMQMessageBase
>>
>> Value of ackHandler = 00000000
>>
>> Value of redeliveryCount = 0
>>
>> Value of properties = Begin Class PrimitiveMap:
>>
>> Begin Class PrimitiveMap:
>>
>> Begin Class = Message
>>
>> Value of Message::ID_MESSAGE = 0
>>
>> Value of ProducerId is Below:
>>
>> Begin Class = ProducerId
>>
>> Value of ProducerId::ID_PRODUCERID = 123
>>
>> Value of ConnectionId = 752afa01-c256-45c2-84ad-c74b0578f199
>>
>> Value of Value = 19
>>
>> Value of SessionId = 0
>>
>> No Data for Class BaseDataStructure
>>
>> End Class = ProducerId
>>
>> Value of Destination is Below:
>>
>> Begin Class = ActiveMQTopic
>>
>> Begin Class = ActiveMQDestination
>>
>> Value of exclusive = false
>>
>> Value of ordered = false
>>
>> Value of advisory = false
>>
>> Value of orderedTarget = coordinator
>>
>> Value of physicalName = Test.20
>>
>> Value of options = Begin Class activemq::util::Properties:
>>
>> End Class activemq::util::Properties:
>>
>> No Data for Class BaseDataStructure
>>
>> End Class = ActiveMQDestination
>>
>> End Class = ActiveMQTopic
>>
>> Value of TransactionId is Below:
>>
>> Object is NULL
>>
>> Value of OriginalDestination is Below:
>>
>> Object is NULL
>>
>> Value of MessageId is Below:
>>
>> Begin Class = MessageId
>>
>> Value of MessageId::ID_MESSAGEID = 110
>>
>> Value of ProducerId is Below:
>>
>> Begin Class = ProducerId
>>
>> Value of ProducerId::ID_PRODUCERID = 123
>>
>> Value of ConnectionId = 752afa01-c256-45c2-84ad-c74b0578f199
>>
>> Value of Value = 19
>>
>> Value of SessionId = 0
>>
>> No Data for Class BaseDataStructure
>>
>> End Class = ProducerId
>>
>> Value of ProducerSequenceId = 19025
>>
>> Value of BrokerSequenceId = 0
>>
>> No Data for Class BaseDataStructure
>>
>> End Class = MessageId
>>
>> Value of OriginalTransactionId is Below:
>>
>> Object is NULL
>>
>> Value of GroupID =
>>
>> Value of GroupSequence = 0
>>
>> Value of CorrelationId =
>>
>> Value of Persistent = 0
>>
>> Value of Expiration = 1197392556357
>>
>> Value of Priority = 4
>>
>> Value of ReplyTo is Below:
>>
>> Object is NULL
>>
>> Value of Timestamp = 1197392551357
>>
>> Value of Type =
>>
>> Value of Content[0] = 
>>
>> Value of Content[1] = , check broker.
>>
>> FILE: ..\src\main\activemq\transport\filters\ResponseCorrelator.cpp,  
>> LINE:
>> 146
>>
>> FILE: ..\src\main\activemq\transport\filters\ResponseCorrelator.cpp,  
>> LINE:
>> 154
>>
>> FILE: ..\src\main\activemq\connector\openwire 
>> \OpenWireFormatNegotiator.cpp,
>> LINE: 105
>>
>> FILE: ..\src\main\activemq\connector\openwire\OpenWireConnector.cpp,  
>> LINE:
>> 1371
>>
>> FILE: ..\src\main\activemq\connector\openwire\OpenWireConnector.cpp,  
>> LINE:
>> 848
>>
>> FILE: ..\src\main\activemq\core\ActiveMQSession.cpp, LINE: 675
>>
>> FILE: ..\src\main\activemq\core\ActiveMQProducer.cpp, LINE: 194
>>
>> FILE: ..\src\main\activemq\core\ActiveMQProducer.cpp, LINE: 149
>>
>> FILE: ..\src\main\activemq\core\ActiveMQProducer.cpp, LINE: 108
>>
>>
>> Test 2
>> Now if you build and run
>> TestProducerBug
>> TestConsumerBug
>>
>> These tests both use the C++ API and works as expected
>>
>>
>> Test 3
>> In the CPP program TestProducerBug you will find a sleep commented  
>> out in
>> the ThreadProc uncomment this line.  Build Program.
>> Build TestConsumerCSharp.
>>
>> You will find with the 100 ms sleep the application is stable.
>>
>>
>> Test 4
>> Build TestProducerBug remember to comment out the sleep
>> Build TestConsumerCSharp.
>>
>> Place a breakpoint on the MessageListner in the C# program.
>>
>> In very little time the producer will throw an exception.
>>
>> Hellweek wrote:
>>>
>>>
>>> Hello,
>>>
>>> I know what I am about to post will upset a few people, however I  
>>> think it
>>> is important that I document my experience with ActiveMQ in the  
>>> hopes that
>>> others like me can have an understanding of the issues that you  
>>> will face.
>>>
>>> A little history.
>>>
>>> I am not new to Open Source projects, have been involved in them  
>>> and have
>>> sponsored the use of open source for many years.
>>>
>>> I have been working with various message brokers for a few years.  My
>>> first experience was with TIBCO EMS.  Needless to say I was very  
>>> impressed
>>> with the stability and functionality of this fine EMS.  Next I had  
>>> the
>>> opportunity to work with Sonic EMS.  Again I was impressed with this
>>> product and was even happier with its low cost of ownership.
>>>
>>> Over the last 6 weeks it has been my job to evaluate for our  
>>> Trading firm
>>> an internal messaging system.  We wanted to use a EMS solution for
>>> dissemination of pricing data to our in-house applications as well as
>>> external clients of ours.  The messaging systems we are  
>>> evaluating.  TIBCO
>>> EMS, MSMQ 3.0, SONIC EMS, ACTIVEMQ 4.1.1 or ActieMQ 5.0.
>>>
>>> How did each product fair?
>>> 1. Tibco EMS no issues with any of the stress tests and performance  
>>> tests.
>>> 2. MSMQ don't even get me started with this POS.
>>> 3. SONIC EMS no issues with any of the stress tests and performance  
>>> tests.
>>> 4. ActiveMQ can not make it past any stress tests.  See issues  
>>> below for
>>> an understanding of what we saw.
>>>
>>>
>>> I have watched ActiveMQ for well over 2 years and 2 years ago the  
>>> project
>>> was so filled with issues that I knew I would never be able to  
>>> recommend
>>> it to the owners of the company.  2 Years later and I was in the  
>>> position
>>> of trying ActiveMQ again and hoping that it would be stable.
>>>
>>> I was very pleased to see that many of the issues I saw with  
>>> ActiveMQ had
>>> been resolved and was committed to giving ActiveMQ a chance at  
>>> being our
>>> EMS solution for the future.  However, I can say after weeks of  
>>> testing
>>> ActiveMQ Is still not ready for production use by myself and the  
>>> firm I
>>> work for.  If you have high message throughput with high number of
>>> subscribers ActiveMQ is not well suited for your needs.
>>>
>>> Lets take some time to examine the issues.
>>>
>>> CPP ActiveMQ Client
>>> 1. A fast producer with slow clients can and will take down the  
>>> producer.
>>> From what I have seen in testing a slow client can bring the  
>>> producer down
>>> and in some cases can bring the broker down.  A miss-behaved  
>>> producer or
>>> client should never ever take the broker down.
>>>
>>> 2. A Producer that producers more then 200 messages per sec locks  
>>> up the
>>> Broker when the Broker has only one client connected.  This one was  
>>> the
>>> biggest issue to accept and the one issue that caused us to say  
>>> ActiveMQ
>>> is not ready for a production environment.  The most basic and  
>>> simple task
>>> of the Message Broker is not working as expected and makes the  
>>> ActiveMQ
>>> unusable in a environment where peak message Generation can exceed  
>>> 200
>>> messages per second.  To be honest we never even get close to 100  
>>> messages
>>> as it seems we die after 50 messages are fired in the same second.   
>>> The
>>> only time I am able to have producers producing without locking up or
>>> crashing is if I don't have any consumers listening.  Having a  
>>> messaging
>>> system that works without consumers is not a valid solution.
>>>
>>> Again important to note.  As long as no consumers are connected I can
>>> produce massive amounts of messages.  Once you connect a client  
>>> massive
>>> issues start to happen.
>>>
>>> 3. Producers and consumers created on the same connection can cause
>>> deadlocks.  This is a major issue and the main solution is to not  
>>> do this.
>>> However, this is an unacceptable solution as it is my understanding  
>>> this
>>> is an acceptable practice.
>>>
>>> 4. A fast producer with a fast consumer leads to resource creep.  I  
>>> don't
>>> want to say it is a memory leak because it is not a leak it is just  
>>> a very
>>> very slow release of the memory.  I should not have to put sleeps  
>>> in a
>>> program just to insure that memory gets released correctly.  In my  
>>> test I
>>> had to sleep for 20 MS between each message being sent to keep the
>>> ActiveMQ consumer running.
>>>
>>> 5. Placing a breakpoint on the message listener on a consumer will  
>>> cause
>>> out of memory errors in the producer.  Why me setting a breakpoint  
>>> on a
>>> consumer can cause the producer to throw an exception is  
>>> unacceptable and
>>> leads me to think that a slow consumer can and will take the broker  
>>> and or
>>> producer down.
>>>
>>> 6. Very confusing to determine what version of ActiveMQ will work  
>>> with
>>> what version of the client.  Example ActiveMQ 5.0 was released this  
>>> week.
>>> However, no new client was released and no information on when new  
>>> client
>>> will be released.  The CPP client just released a 2.1.3 version that
>>> claims it should be paired with 4.1.1 of the ActiveMQ broker.   
>>> Where is
>>> the CPP client that is to work with the new features of 5.0?
>>>
>>> With all the issues I have I will not be able to go to a production
>>> environment with ActiveMQ, this is a shame as the people that have  
>>> been
>>> working this project are talented people and should be commended  
>>> for the
>>> work that has been done.
>>>
>> http://www.nabble.com/file/p14278412/ActiveMQ%2BIssue.ZIP ActiveMQ 
>> +Issue.ZIP
>> -- 
>> View this message in context:
>> http://www.nabble.com/ActiveMQ-thoughts-tp14262131s2354p14278412.html
>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/ActiveMQ-thoughts-tp14262131s2354p14295130.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Mime
View raw message