diff --git a/src/reference/docbook/ip.xml b/src/reference/docbook/ip.xml
index 848ff17fd0..8755a69cbe 100644
--- a/src/reference/docbook/ip.xml
+++ b/src/reference/docbook/ip.xml
@@ -765,6 +765,32 @@
set. The resequencer uses these headers to return the messages to their proper
sequence.
+ Pool Size
+
+ When using NIO, it is important to understand how threads are used, in order set the pool-size
+ appropriately. One thread from the pool is used to handle all socket events (e.g. data is
+ ready to be read). This thread is not available for other tasks. When data are ready to be
+ read, this thread dispatches the actual I/O to another thread from the pool, which reads
+ from the channel and writes the data to a temporary buffer; if this read is the start of
+ a new message, a third thread is used to read from that buffer to assemble the data into
+ a message.
+
+
+ If there is not enough room in the temporary buffer to receive the newly read data, the
+ reader thread will block until the assembler thread consumes some data. If the pool is
+ exhausted, this will cause a deadlock, until another thread becomes available. The temporary
+ buffer is currently 1024 bytes. In the simplest case, with one connection, and data greater
+ than 1024 bytes, a pool-size of 2 will cause this deadlock to occur because a thread will
+ never be made available.
+
+
+ For this reason, when using NIO, the pool-size should be set to a minimum of 3. This does not
+ mean you have to reserve 2 threads for each socket because, aside from the selector thread,
+ the threads in the pool are shared across all the connections. The actual pool-size needed
+ will depend on a number of factors including the number of active connections, how
+ much utilization there is on those connections, and how long message processing takes when
+ a new message is received.
+
IP Configuration Attributes
@@ -950,8 +976,8 @@
Specifies the concurrency. For tcp, not using nio, specifies the
number of concurrent connections supported by the adapter. For tcp,
- using nio, specifies the number of tcp fragments that are concurrently
- reassembled into complete messages.
+ using nio, it should be set to a minimum of 3; see 'Pool Size' in
+ .
It only applies in this sense if task-executor is not configured.
However, pool-size is also used for the server socket backlog,
regardless of whether an external task executor is used. Defaults to 5.