You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@mina.apache.org by Wenrui Guo <we...@ericsson.com> on 2008/08/04 08:12:55 UTC

OutOfMemoryError Java heap space after using ReadThrottleFilter

Hi, all

Since I want to control incoming messages retrieved from SMSC, I decided
to use ReadThrottleFilter to block excessive messages.

The code snippet listed as below:

	// Executor used to control read throttle
	private ScheduledExecutorService throttleExecutor = Executors
			.newScheduledThreadPool(1);

		connector = new NioSocketConnector();
		connector.setConnectTimeout(connectTimeout);
		connector.getFilterChain().addLast("codec",
				new ProtocolCodecFilter(new
SMPPCodecFactory(false)));
		connector.getFilterChain().addLast("exec", new
ExecutorFilter());
		connector.getFilterChain().addLast("throttle",
				new
ReadThrottleFilter(throttleExecutor));


But under high workload, the system still throw such exception:

Exception in thread "pool-5-thread-3" java.lang.OutOfMemoryError: Java
heap space

Who can tell me how can I achieve flow control aim? Does
readThrottleFilter can't limit message flow?

BR
andeson

RE: OutOfMemoryError Java heap space after using ReadThrottleFilter

Posted by Wenrui Guo <we...@ericsson.com>.
By the way. The Mina version I am using is MINA 2.0M1. 

-----Original Message-----
From: Wenrui Guo [mailto:wenrui.guo@ericsson.com] 
Sent: Monday, August 04, 2008 2:27 PM
To: users@mina.apache.org
Subject: RE: OutOfMemoryError Java heap space after using
ReadThrottleFilter

The complete exception logs like follows:

WARNING: Read buffer flooded - session: 433071408 / 65536 bytes,
service: 433586448 / 67108864 bytes, global: 433586448 / 134217728
bytes.
Aug 4, 2008 2:23:36 PM org.apache.mina.filter.traffic.ReadThrottleFilter
log
WARNING: Read buffer flooded - session: 433408416 / 65536 bytes,
service: 433658336 / 67108864 bytes, global: 433658336 / 134217728
bytes.
Aug 4, 2008 2:23:36 PM org.apache.mina.filter.traffic.ReadThrottleFilter
log
WARNING: Read buffer flooded - session: 295520 / 65536 bytes, service:
433703768 / 67108864 bytes, global: 433703768 / 134217728 bytes.
Aug 4, 2008 2:23:41 PM org.apache.mina.filter.traffic.ReadThrottleFilter
log
WARNING: Read buffer flooded - session: 434435736 / 65536 bytes,
service: 435337336 / 67108864 bytes, global: 435337176 / 134217728
bytes.
Aug 4, 2008 2:23:44 PM org.apache.mina.filter.traffic.ReadThrottleFilter
log
WARNING: Read buffer flooded - session: 503360 / 65536 bytes, service:
435082904 / 67108864 bytes, global: 435082904 / 134217728 bytes.
Aug 4, 2008 2:23:47 PM org.apache.mina.filter.traffic.ReadThrottleFilter
log
WARNING: Read buffer flooded - session: 434579712 / 65536 bytes,
service: 435462112 / 67108864 bytes, global: 435462592 / 134217728
bytes.
Aug 4, 2008 2:23:55 PM org.apache.mina.common.DefaultExceptionMonitor
exceptionCaught
WARNING: Unexpected exception.
java.lang.OutOfMemoryError: Java heap space
	at java.util.HashMap.newKeyIterator(HashMap.java:889)
	at java.util.HashMap$KeySet.iterator(HashMap.java:921)
	at java.util.HashSet.iterator(HashSet.java:154)
	at
sun.nio.ch.SelectorImpl.processDeregisterQueue(SelectorImpl.java:127)
	at
sun.nio.ch.PollSelectorImpl.doSelect(PollSelectorImpl.java:60)
	at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
	at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
	at
org.apache.mina.transport.socket.nio.NioProcessor.select(NioProcessor.ja
va:65)
	at
org.apache.mina.common.AbstractPollingIoProcessor$Worker.run(AbstractPol
lingIoProcessor.java:672)
	at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.j
ava:51)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecuto
r.java:650)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.ja
va:675)
	at java.lang.Thread.run(Thread.java:595)
Aug 4, 2008 2:23:51 PM org.apache.mina.filter.traffic.ReadThrottleFilter
log
WARNING: Read buffer flooded - session: 435391656 / 65536 bytes,
service: 436694856 / 67108864 bytes, global: 436694856 / 134217728
bytes.
Aug 4, 2008 2:23:55 PM org.apache.mina.common.DefaultExceptionMonitor
exceptionCaught
WARNING: Unexpected exception.
java.lang.OutOfMemoryError: Java heap space
	at sun.nio.ch.Util.releaseTemporaryDirectBuffer(Util.java:67)
	at sun.nio.ch.IOUtil.write(IOUtil.java:82)
	at
sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:302)
	at
org.apache.mina.transport.socket.nio.NioProcessor.write(NioProcessor.jav
a:162)
	at
org.apache.mina.transport.socket.nio.NioProcessor.write(NioProcessor.jav
a:41)
	at
org.apache.mina.common.AbstractPollingIoProcessor.writeBuffer(AbstractPo
llingIoProcessor.java:567)
	at
org.apache.mina.common.AbstractPollingIoProcessor.flushNow(AbstractPolli
ngIoProcessor.java:528)
	at
org.apache.mina.common.AbstractPollingIoProcessor.flush(AbstractPollingI
oProcessor.java:469)
	at
org.apache.mina.common.AbstractPollingIoProcessor.access$500(AbstractPol
lingIoProcessor.java:43)
	at
org.apache.mina.common.AbstractPollingIoProcessor$Worker.run(AbstractPol
lingIoProcessor.java:681)
	at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.j
ava:51)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecuto
r.java:650)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.ja
va:675)
	at java.lang.Thread.run(Thread.java:595)
Aug 4, 2008 2:23:55 PM org.apache.mina.filter.traffic.ReadThrottleFilter
log

BR
anderson

-----Original Message-----
From: Wenrui Guo [mailto:wenrui.guo@ericsson.com]
Sent: Monday, August 04, 2008 2:13 PM
To: users@mina.apache.org
Subject: OutOfMemoryError Java heap space after using ReadThrottleFilter

Hi, all

Since I want to control incoming messages retrieved from SMSC, I decided
to use ReadThrottleFilter to block excessive messages.

The code snippet listed as below:

	// Executor used to control read throttle
	private ScheduledExecutorService throttleExecutor = Executors
			.newScheduledThreadPool(1);

		connector = new NioSocketConnector();
		connector.setConnectTimeout(connectTimeout);
		connector.getFilterChain().addLast("codec",
				new ProtocolCodecFilter(new
SMPPCodecFactory(false)));
		connector.getFilterChain().addLast("exec", new
ExecutorFilter());
		connector.getFilterChain().addLast("throttle",
				new
ReadThrottleFilter(throttleExecutor));


But under high workload, the system still throw such exception:

Exception in thread "pool-5-thread-3" java.lang.OutOfMemoryError: Java
heap space

Who can tell me how can I achieve flow control aim? Does
readThrottleFilter can't limit message flow?

BR
andeson

RE: OutOfMemoryError Java heap space after using ReadThrottleFilter

Posted by Wenrui Guo <we...@ericsson.com>.
The complete exception logs like follows:

WARNING: Read buffer flooded - session: 433071408 / 65536 bytes,
service: 433586448 / 67108864 bytes, global: 433586448 / 134217728
bytes.
Aug 4, 2008 2:23:36 PM org.apache.mina.filter.traffic.ReadThrottleFilter
log
WARNING: Read buffer flooded - session: 433408416 / 65536 bytes,
service: 433658336 / 67108864 bytes, global: 433658336 / 134217728
bytes.
Aug 4, 2008 2:23:36 PM org.apache.mina.filter.traffic.ReadThrottleFilter
log
WARNING: Read buffer flooded - session: 295520 / 65536 bytes, service:
433703768 / 67108864 bytes, global: 433703768 / 134217728 bytes.
Aug 4, 2008 2:23:41 PM org.apache.mina.filter.traffic.ReadThrottleFilter
log
WARNING: Read buffer flooded - session: 434435736 / 65536 bytes,
service: 435337336 / 67108864 bytes, global: 435337176 / 134217728
bytes.
Aug 4, 2008 2:23:44 PM org.apache.mina.filter.traffic.ReadThrottleFilter
log
WARNING: Read buffer flooded - session: 503360 / 65536 bytes, service:
435082904 / 67108864 bytes, global: 435082904 / 134217728 bytes.
Aug 4, 2008 2:23:47 PM org.apache.mina.filter.traffic.ReadThrottleFilter
log
WARNING: Read buffer flooded - session: 434579712 / 65536 bytes,
service: 435462112 / 67108864 bytes, global: 435462592 / 134217728
bytes.
Aug 4, 2008 2:23:55 PM org.apache.mina.common.DefaultExceptionMonitor
exceptionCaught
WARNING: Unexpected exception.
java.lang.OutOfMemoryError: Java heap space
	at java.util.HashMap.newKeyIterator(HashMap.java:889)
	at java.util.HashMap$KeySet.iterator(HashMap.java:921)
	at java.util.HashSet.iterator(HashSet.java:154)
	at
sun.nio.ch.SelectorImpl.processDeregisterQueue(SelectorImpl.java:127)
	at
sun.nio.ch.PollSelectorImpl.doSelect(PollSelectorImpl.java:60)
	at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
	at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
	at
org.apache.mina.transport.socket.nio.NioProcessor.select(NioProcessor.ja
va:65)
	at
org.apache.mina.common.AbstractPollingIoProcessor$Worker.run(AbstractPol
lingIoProcessor.java:672)
	at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.j
ava:51)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecuto
r.java:650)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.ja
va:675)
	at java.lang.Thread.run(Thread.java:595)
Aug 4, 2008 2:23:51 PM org.apache.mina.filter.traffic.ReadThrottleFilter
log
WARNING: Read buffer flooded - session: 435391656 / 65536 bytes,
service: 436694856 / 67108864 bytes, global: 436694856 / 134217728
bytes.
Aug 4, 2008 2:23:55 PM org.apache.mina.common.DefaultExceptionMonitor
exceptionCaught
WARNING: Unexpected exception.
java.lang.OutOfMemoryError: Java heap space
	at sun.nio.ch.Util.releaseTemporaryDirectBuffer(Util.java:67)
	at sun.nio.ch.IOUtil.write(IOUtil.java:82)
	at
sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:302)
	at
org.apache.mina.transport.socket.nio.NioProcessor.write(NioProcessor.jav
a:162)
	at
org.apache.mina.transport.socket.nio.NioProcessor.write(NioProcessor.jav
a:41)
	at
org.apache.mina.common.AbstractPollingIoProcessor.writeBuffer(AbstractPo
llingIoProcessor.java:567)
	at
org.apache.mina.common.AbstractPollingIoProcessor.flushNow(AbstractPolli
ngIoProcessor.java:528)
	at
org.apache.mina.common.AbstractPollingIoProcessor.flush(AbstractPollingI
oProcessor.java:469)
	at
org.apache.mina.common.AbstractPollingIoProcessor.access$500(AbstractPol
lingIoProcessor.java:43)
	at
org.apache.mina.common.AbstractPollingIoProcessor$Worker.run(AbstractPol
lingIoProcessor.java:681)
	at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.j
ava:51)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecuto
r.java:650)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.ja
va:675)
	at java.lang.Thread.run(Thread.java:595)
Aug 4, 2008 2:23:55 PM org.apache.mina.filter.traffic.ReadThrottleFilter
log

BR
anderson

-----Original Message-----
From: Wenrui Guo [mailto:wenrui.guo@ericsson.com] 
Sent: Monday, August 04, 2008 2:13 PM
To: users@mina.apache.org
Subject: OutOfMemoryError Java heap space after using ReadThrottleFilter

Hi, all

Since I want to control incoming messages retrieved from SMSC, I decided
to use ReadThrottleFilter to block excessive messages.

The code snippet listed as below:

	// Executor used to control read throttle
	private ScheduledExecutorService throttleExecutor = Executors
			.newScheduledThreadPool(1);

		connector = new NioSocketConnector();
		connector.setConnectTimeout(connectTimeout);
		connector.getFilterChain().addLast("codec",
				new ProtocolCodecFilter(new
SMPPCodecFactory(false)));
		connector.getFilterChain().addLast("exec", new
ExecutorFilter());
		connector.getFilterChain().addLast("throttle",
				new
ReadThrottleFilter(throttleExecutor));


But under high workload, the system still throw such exception:

Exception in thread "pool-5-thread-3" java.lang.OutOfMemoryError: Java
heap space

Who can tell me how can I achieve flow control aim? Does
readThrottleFilter can't limit message flow?

BR
andeson