Re: mKahaDB - no clean-up because of ACKs

2018-03-12 Thread alprausch77
Hello Tim.
Thanks for the hint about the XA transactions.
There were indeed 2 XA transactions hanging in the kahaDB files. After I
committed them via JConsole the store was cleaned-up.

Joachim



--
Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html


mKahaDB - no clean-up because of ACKs

2018-03-09 Thread alprausch77
Hello.
Recently we had a problem on a ActiveMQ 5.10 version (with manually applied
patch for AMQ-5542).
The mKahaDB data store increased to ~30 GB and couldn´t clean up the data
files anymore.

The log showed always something like this:
/not removing data file: 317633 as contained ack(s) refer to referenced
file: [317632, 317633]/

I´m aware that the data files can´t be cleaned up if there is a not consumed
message in a queue. But that´s not the case here.
I have started a ActiveMQ with the copied storage on my local machine and
checked every queue and topic via JConsole if there is any message in it -
but every queue/topic shows a size of 0.

So it seems to me that the messages are processed but just the ACK is
somewhat stuck in the store.

Is there a way to (manually) get rid of the ACKs?
Or is there a way to have a deeper analysis of the kahaDB storage files to
find the reason for the stucked ACKs?

I can provide the whole log with the KahaDB recovering if this is of any
help.

Thanks.
Joachim



--
Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html


Re: Question about rollbackOnlyOnAsyncException (AMQ-3166)

2018-02-14 Thread alprausch77
Yes, we use XA transactions.

I don´t think that the NIO mixes this up somehow. We can run our system with
a standalone ActiveMQ using tcp or nio but also in an embedded mode inside
Wildfly using the VM protocol.

I just run our tests again with the enableAckCompaction set to false for the
kahaDB - it looked a lot better as we now only have a few message sends
taking ~10ms or ~20ms (which is also a long time...) but no send took longer
than that.

I´ll have further tests in that direction and will keep this post updated.

Thanks



--
Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html


Re: Question about rollbackOnlyOnAsyncException (AMQ-3166)

2018-02-14 Thread alprausch77
Hello Gary.
Thanks for your reply.
I already tried the rollbackOnlyOnAsyncException. But this one only works if
the transaction still exists when the error in the async send happens.
But if the TX is already finished, than there is no such action because the
code which looks up the transaction returns null (naturally) and therfore
can´t do a rollback.

That´s why I asked if there is some way to add a synchronization on the TX
commit on the asynch outcome...

Some time ago I also tested out the preallocation strategies but found no
real performance differences between those. I think this has to do with the
Windows file system which we are using; on Unix based systems this seems to
have more of an effect.

I haven´t tried the ackCompaction yet. But if I understand it correctly I
don´t think this will have much influence either because we aren´t doing
much bulk processing. In each transaction there are only a few messages
received / send.

But I will have a look at this and also to Artemis.




--
Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html


Re: Question about rollbackOnlyOnAsyncException (AMQ-3166)

2018-02-11 Thread alprausch77
Hello Tim.
Thank you for your suggestion but I already checked the GC (forgot to
mention it).
The times of the slow JMS sends doesn´t correlate with the garbage collector
events.
Btw: we use CMS as collector.

Any other ideas?

Thanks.
Joachim



--
Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html


Question about rollbackOnlyOnAsyncException (AMQ-3166)

2018-02-09 Thread alprausch77
Hello.
I have a question about the AMQ-3166 issue and the introduced
'rollbackOnlyOnAsyncException' flag.
In the comments of the AMQ-3166 task Gary Tully says
async exceptions on transactional ops - message send and message ack
will result in the transaction being marked rollback-only. Commit will fail
with an exception.


But if I send the message in async mode than it´s likely that the client
side transaction is already committed before(!) an exception occurs on the
AMQ side. In that case the TransportConnection class will no longer find a
transaction for the message (as it´s already committed) and of course it
can´t be rolled-back anymore.
Or do I misunderstand the behaviour?


My current problem is that we switched from async to sync sends because
we´ve seen some messages getting lost without "seeing" it on the client
side. For our use-case it´s not acceptable to have a message loss. So we
switched to the sync send.
But this comes with a high performance impact.
We are seeing a lot of messages to be send in 0-3ms but we see occassional
spikes in the send times (in the ActiveMQMessageProducer) of 30-500ms. 

The 'producerFlowControl' is already disabled in the configuration; the
storage is mKahaDB.
And we already tested a lot of configuration combinations with no real
(positive) effect on the performance.

Is there a way to avoid such spikes in the sync send?
(Tests has shown that the spikes are most likely caused due to I/O issues.
Because when using a RAM disk as location for the kahaDB I don´t see any
such spikes.)

Or in async mode: is there a way to have a synchronization on transaction
commit which verifies that the message is processed?
This way the message processing could be triggered in async mode and the
client could do further work and only synchronizes on the transaction
commit.

Thanks.
Joachim

btw: we are running AMQ 5.14.5 (unfortunatelly on Windows)



--
Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html


Question about rollbackOnlyOnAsyncException (AMQ-3166)

2018-02-09 Thread alprausch77
Hello.
I have a question about the AMQ-3166 issue and the introduced
'rollbackOnlyOnAsyncException' flag.
In the comments of the AMQ-3166 task Gary Tully says
 /async exceptions on transactional ops - message send and message ack
will result in the transaction being marked rollback-only. Commit will fail
with an exception./


But if I send the message in async mode than it´s likely that the client
side transaction is already committed before(!) an exception occurs on 

the AMQ side. In that case the TransportConnection class will no longer find
a transaction for the message (as it´s already committed) and of 

course it can´t be rolled-back anymore.
Or do I misunderstand the behaviour?


My current problem is that we switched from async to sync sends because
we´ve seen some messages getting lost without "seeing" it on the client 

side. For our use-case it´s not acceptable to have a message loss. So we
switched to the sync send.
But this comes with a high performance impact.
We are seeing a lot of messages to be send in 0-3ms but we see occassional
spikes in the send times (in the ActiveMQMessageProducer) of 30-500ms. 

The 'producerFlowControl' is already disabled in the configuration; the
storage is mKahaDB.
And we already tested a lot of configuration combinations with no real
(positive) effect on the performance.

Is there a way to avoid such spikes in the sync send?
(Tests has shown that the spikes are most likely caused due to I/O issues.
Because when using a RAM disk as location for the kahaDB I don´t see 

any such spikes.)

Or in async mode: is there a way to have a synchronization on transaction
commit which verifies that the message is processed?
This way the message processing could be triggered in async mode and the
client could do further work and only synchronizes on the transaction 

commit.


Thanks.

btw: we are running AMQ 5.14.5 (unfortunatelly on Windows)



--
Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html


Re: UseDedicatedTaskRunner configuration

2018-01-09 Thread alprausch77
Thanks for the answer.

I´ve created the JIRA issue https://issues.apache.org/jira/browse/AMQ-6883



--
Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html


UseDedicatedTaskRunner configuration

2018-01-03 Thread alprausch77
Hello.

The documentation
(http://activemq.apache.org/how-do-i-configure-10s-of-1000s-of-queues-in-a-single-broker-.html)
states that the DedicatedTaskRunner is disabled by default from 5.6 onwards.
This is true if the ActiveMQ is started directly, e.g. with "activemq.bat
start".

But if the ActiveMQ is started as a windows service from the wrapper.exe the
DedicatedTaskRunner is still activated because the wrapper.conf has
following entry:
wrapper.java.additional.8=-Dorg.apache.activemq.UseDedicatedTaskRunner=true

Question: is there a reason why the DedicatedTaskRunner is configured
differently for a standard AMQ start vs. service?
If so, can someone please explain it to me.

If the DedicatedTaskRunner should also be disabled for the service wrapper
than the default configuration should be changed accordingly.



--
Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html


Re: Clarification of temp usage

2016-05-02 Thread alprausch77
Ok. Thank you.
That explains the behaviour I´v seen...




--
View this message in context: 
http://activemq.2283324.n4.nabble.com/Clarification-of-temp-usage-tp4711305p4711422.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Clarification of temp usage

2016-04-28 Thread alprausch77
Hello.
I have a question regarding the ActiveMQ temp usage. (The ActiveMQ version
is 5.10.0 but also checked with latest 5.13.2; as storage I´ve tested with
KahaDb and mKahadb)
In our system we have some queues and topics. The topics has persistent
messages; the queues has combinations of persistent and non-persistent
messages (also mixed in one queue).
The producer flow control is turned off due to performance considerations on
the producer side.

My understanding is, that persistent messages are stored via fileCursor in
the files.

And now to the observations in a running system:
- the topic (ServerPushTopic) gets "a lot" of messages in a short amount of
time (approx. 5000/minute at peak times)
-- the consumer is relatively slow
-- the producers are typically demon jobs which produces the vast amount of
messages; but also UI interactions
- the other queues are randomely accessed by producers and consumers; both
sides fast
- the messages are a mix of text and object messages; but typically really
small

The "enqueued" count of the ServerPushTopic increases fast; the dequeued
count only slow because of the slow consumers. After some time (dependend on
the system usage configuration) we get following error messages:
  http://activemq.apache.org/producer-flow-control.html
for more info>

If I look in the temp files of the KahaDb (./data/tmp_storage) I see mostly
topic messages of ServerPushTopic inside.
But: why are these messages stored in the temp files and not in the
persistent memory of KahaDb? (Remember: messages to ServerPushTopic are
persistent.)
  
I´ve already tried a lot of configuration options for the ServerPushTopic,
for example:
- pendingSubscriberPolicy
- pendingDurableSubscriberPolicy
- slowConsumerStrategy
- and a lot of combinations thereof

The system usage part of the broker.xml (values are trimmed down to
reproduce the 100% temp store error faster; on production side, these values
are of course much higher.)












  


The only way I could get around this problem is to enable the
producerFlowControl; but as mentioned earlier I´d really like to have it
turned off because of performance reasons on the producer side.

Could someone please explain, why the ServerPushTopic messages are stored
into the tempUsage and causes the mentioned error?  

Best regards
Joachim



--
View this message in context: 
http://activemq.2283324.n4.nabble.com/Clarification-of-temp-usage-tp4711305.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.