[ 
https://issues.apache.org/jira/browse/AMQ-4417?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vincent Baudry updated AMQ-4417:
--------------------------------

    Description: 
One of our production node running ActiveMQ shows a permanent error log every 
milisecond :

Exception in thread "VMTransport" java.lang.IllegalStateException: Unbalanced 
usage: -274090111
at org.apache.activemq.thread.Valve.decrement(Valve.java:113) 
at org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:210) 
at 
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122) 
at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43) 
at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:678)
 
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:703) 
at java.lang.Thread.run(Thread.java:811) 

The value behind unbalanced usage keeping moving but globally getting 
decremented over time.

We are for now unable to see the side effect on the app, which is still 
running, except the CPU usage going through the roof, probably because of this 
constant logging.

As the log doesn't have a root in our code, it's hard to understand what's gone 
wrong initially, and if it might be linked to our usage of ActiveMQ.

I've read the source code but can't understand why the valve usage int has gone 
initially negative. But it seems to me that when it has gone once negative, the 
only way to have the broker work fine again is to restart the server to 
reinitialize this value (as all subsequent iterate() / increment() calls will 
throw/catch an exception due to usage negative value and finally hit the 
decrement() method ).

As we don't have a scenario to reproduce the bug, I don't expect you to find a 
solution to it right now, but I wanted to file it in case anyone encounter the 
same bug and has the way to reproduce it.

And also I would be glad to have answers to the following questions, if 
possible :
- Do you have any clues concerning this issue ? Things I could investigate 
further ?
- Doest it seem normal to you that my exception log starts in a Thread.run() 
then plugged to the PooledTaskRunner mechanism ?
- What kind of ActiveMQ tasks run using this PooledTaskRunner / 
VmTransport.iterate() mechanism ? All AMQ tasks ? Only enqueueing/dequeueing 
tasks ? Internal tasks ?
- Is it possible that some enqueueing/dequeueing tasks still work fine when in 
this state ? Is this faulty valve not shared by all producers connecting to the 
broker via vm:// ?

To give you a little technical context, we use this broker with a spring 
producer using Spring JmsTemplate through vm://transport

  was:
One of our production node running ActiveMQ shows a permanent error log every 
milisecond :

Exception in thread "VMTransport" java.lang.IllegalStateException: Unbalanced 
usage: -274090111
at org.apache.activemq.thread.Valve.decrement(Valve.java:113) 
at org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:210) 
at 
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122) 
at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43) 
at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:678)
 
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:703) 
at java.lang.Thread.run(Thread.java:811) 

The value behind unbalanced usage keeping moving but globally getting 
decremented over time.

We are for now unable to see the side effect on the app, which is still 
running, except the CPU usage going through the roof, probably because of this 
constant logging.

As the log doesn't have a root in our code, it's hard to understand what's gone 
wrong initially, and if it might be linked to our usage of ActiveMQ.

I've read the source code but can't understand why the valve usage int has gone 
initially negative. But it seems to me that when it has gone once negative, the 
only way to have the broker work fine again is to restart the server to 
reinitialize this value (as all subsequent iterate() / increment() calls will 
throw/catch an exception due to usage negative value and finally hit the 
decrement() method ).

As we don't have a scenario to reproduce the bug, I don't expect you to find a 
solution to it right now, but I wanted to file it in case anyone encounter the 
same bug and has the way to reproduce it.

And also I would be glad to have answers to the following questions, if 
possible :
- Do you have any clues concerning this issue ? Things I could investigate 
further ?
- Doest it seem normal to you that my exception log starts in a Thread.run() 
then plugged to the PooledTaskRunner mechanism ?
- What kind of ActiveMQ tasks run using this PooledTaskRunner / 
VmTransport.iterate() mechanism ? All AMQ tasks ? Only enqueueing/dequeueing 
tasks ? Internal tasks ?
- Is it possible that some enqueueing/dequeueing tasks still work fine when in 
this state ? Is this faulty valve not shared by all producers connecting to the 
broker via vm:// ?

To give you a little technical context, we use this broker with a spring 
producer using Spring JmsTemplate through vm://transport

    
> Unbalanced usage Exception in Valve.decrement
> ---------------------------------------------
>
>                 Key: AMQ-4417
>                 URL: https://issues.apache.org/jira/browse/AMQ-4417
>             Project: ActiveMQ
>          Issue Type: Bug
>    Affects Versions: 5.4.2
>            Reporter: Vincent Baudry
>
> One of our production node running ActiveMQ shows a permanent error log every 
> milisecond :
> Exception in thread "VMTransport" java.lang.IllegalStateException: Unbalanced 
> usage: -274090111
> at org.apache.activemq.thread.Valve.decrement(Valve.java:113) 
> at org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:210) 
> at 
> org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
>  
> at 
> org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43) 
> at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:678)
>  
> at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:703)
>  
> at java.lang.Thread.run(Thread.java:811) 
> The value behind unbalanced usage keeping moving but globally getting 
> decremented over time.
> We are for now unable to see the side effect on the app, which is still 
> running, except the CPU usage going through the roof, probably because of 
> this constant logging.
> As the log doesn't have a root in our code, it's hard to understand what's 
> gone wrong initially, and if it might be linked to our usage of ActiveMQ.
> I've read the source code but can't understand why the valve usage int has 
> gone initially negative. But it seems to me that when it has gone once 
> negative, the only way to have the broker work fine again is to restart the 
> server to reinitialize this value (as all subsequent iterate() / increment() 
> calls will throw/catch an exception due to usage negative value and finally 
> hit the decrement() method ).
> As we don't have a scenario to reproduce the bug, I don't expect you to find 
> a solution to it right now, but I wanted to file it in case anyone encounter 
> the same bug and has the way to reproduce it.
> And also I would be glad to have answers to the following questions, if 
> possible :
> - Do you have any clues concerning this issue ? Things I could investigate 
> further ?
> - Doest it seem normal to you that my exception log starts in a Thread.run() 
> then plugged to the PooledTaskRunner mechanism ?
> - What kind of ActiveMQ tasks run using this PooledTaskRunner / 
> VmTransport.iterate() mechanism ? All AMQ tasks ? Only enqueueing/dequeueing 
> tasks ? Internal tasks ?
> - Is it possible that some enqueueing/dequeueing tasks still work fine when 
> in this state ? Is this faulty valve not shared by all producers connecting 
> to the broker via vm:// ?
> To give you a little technical context, we use this broker with a spring 
> producer using Spring JmsTemplate through vm://transport

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to