To facilitate low latency/high throughout applications, gax provides a ChannelPool.
The pool is meant to facilitate high throughput/low latency clients. By splitting load across
multiple gRPC channels the client can spread load across multiple frontends and overcome gRPC's
limit of 100 concurrent RPCs per channel. However oversizing the ChannelPool can lead to
underutilized channels which will lead to high tail latency due to GFEs disconnecting idle
channels.
The ChannelPool is designed to adapt to varying traffic patterns by tracking
outstanding RPCs and resizing the pool size. This class configures the behavior. In general
clients should aim to have less than 50 concurrent RPCs per channel and at least 1 outstanding
per channel per minute.
The settings in this class will be applied every minute.
When the average of the maximum number of outstanding RPCs in a single minute surpass this
threshold, channels will be added to the pool. For google services, gRPC channels will start
locally queuing RPC when there are 100 concurrent RPCs.
If all of the channels should be replaced on an hourly basis.
The GFE will forcibly disconnect active channels after an hour. To minimize the cost of
reconnects, this will create a new channel asynchronuously, prime it and then swap it with an
old channel.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-03 UTC."],[[["\u003cp\u003eThis webpage provides documentation for \u003ccode\u003eChannelPoolSettings\u003c/code\u003e in the Google API Client Libraries for Java (gax), focusing on managing gRPC channel behavior for high throughput and low latency.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eChannelPool\u003c/code\u003e is designed to adapt to varying traffic patterns by tracking outstanding RPCs and resizing the pool, optimizing performance by distributing load across multiple channels.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eChannelPoolSettings\u003c/code\u003e class configures the channel pool's behavior, allowing users to set parameters such as the initial, minimum, and maximum number of channels, as well as thresholds for scaling the pool up or down.\u003c/p\u003e\n"],["\u003cp\u003eThe most recent version of the \u003ccode\u003eChannelPoolSettings\u003c/code\u003e documentation is 2.63.1, and there are various versions of documentation available ranging from 2.7.1 to 2.63.1.\u003c/p\u003e\n"],["\u003cp\u003eThe library is currently in Beta, which means it is subject to the Pre-GA Offerings Terms, implying limited support and potential for non-compatible changes between pre-GA versions.\u003c/p\u003e\n"]]],[],null,["# Class ChannelPoolSettings (2.69.0)\n\nVersion latestkeyboard_arrow_down\n\n- [2.69.0 (latest)](/java/docs/reference/gax/latest/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.68.2](/java/docs/reference/gax/2.68.2/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.67.0](/java/docs/reference/gax/2.67.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.66.0](/java/docs/reference/gax/2.66.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.65.0](/java/docs/reference/gax/2.65.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.63.1](/java/docs/reference/gax/2.63.1/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.62.0](/java/docs/reference/gax/2.62.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.61.0](/java/docs/reference/gax/2.61.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.60.0](/java/docs/reference/gax/2.60.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.59.1](/java/docs/reference/gax/2.59.1/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.58.0](/java/docs/reference/gax/2.58.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.57.0](/java/docs/reference/gax/2.57.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.55.0](/java/docs/reference/gax/2.55.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.54.1](/java/docs/reference/gax/2.54.1/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.53.0](/java/docs/reference/gax/2.53.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.52.0](/java/docs/reference/gax/2.52.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.51.0](/java/docs/reference/gax/2.51.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.50.0](/java/docs/reference/gax/2.50.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.49.0](/java/docs/reference/gax/2.49.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.48.1](/java/docs/reference/gax/2.48.1/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.47.0](/java/docs/reference/gax/2.47.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.46.1](/java/docs/reference/gax/2.46.1/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.45.0](/java/docs/reference/gax/2.45.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.43.0](/java/docs/reference/gax/2.43.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.42.0](/java/docs/reference/gax/2.42.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.41.0](/java/docs/reference/gax/2.41.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.39.0](/java/docs/reference/gax/2.39.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.38.0](/java/docs/reference/gax/2.38.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.37.0](/java/docs/reference/gax/2.37.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.36.0](/java/docs/reference/gax/2.36.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.35.0](/java/docs/reference/gax/2.35.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.34.1](/java/docs/reference/gax/2.34.1/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.33.0](/java/docs/reference/gax/2.33.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.32.1](/java/docs/reference/gax/2.32.1/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.31.1](/java/docs/reference/gax/2.31.1/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.30.1](/java/docs/reference/gax/2.30.1/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.24.0](/java/docs/reference/gax/2.24.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.23.3](/java/docs/reference/gax/2.23.3/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.22.0](/java/docs/reference/gax/2.22.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.21.0](/java/docs/reference/gax/2.21.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.20.1](/java/docs/reference/gax/2.20.1/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.19.6](/java/docs/reference/gax/2.19.6/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.18.7](/java/docs/reference/gax/2.18.7/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.17.0](/java/docs/reference/gax/2.17.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.16.0](/java/docs/reference/gax/2.16.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.15.0](/java/docs/reference/gax/2.15.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.14.0](/java/docs/reference/gax/2.14.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.13.0](/java/docs/reference/gax/2.13.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.12.2](/java/docs/reference/gax/2.12.2/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.11.0](/java/docs/reference/gax/2.11.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.10.0](/java/docs/reference/gax/2.10.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.9.0](/java/docs/reference/gax/2.9.0/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.8.1](/java/docs/reference/gax/2.8.1/com.google.api.gax.grpc.ChannelPoolSettings)\n- [2.7.1](/java/docs/reference/gax/2.7.1/com.google.api.gax.grpc.ChannelPoolSettings) \n| **Beta**\n|\n|\n| This library is covered by the [Pre-GA Offerings Terms](/terms/service-terms#1)\n| of the Terms of Service. Pre-GA libraries might have limited support,\n| and changes to pre-GA libraries might not be compatible with other pre-GA versions.\n| For more information, see the\n[launch stage descriptions](/products#product-launch-stages). \n\n public abstract class ChannelPoolSettings\n\nSettings to control ChannelPool behavior.\n\nTo facilitate low latency/high throughout applications, gax provides a ChannelPool.\nThe pool is meant to facilitate high throughput/low latency clients. By splitting load across\nmultiple gRPC channels the client can spread load across multiple frontends and overcome gRPC's\nlimit of 100 concurrent RPCs per channel. However oversizing the ChannelPool can lead to\nunderutilized channels which will lead to high tail latency due to GFEs disconnecting idle\nchannels.\n\nThe ChannelPool is designed to adapt to varying traffic patterns by tracking\noutstanding RPCs and resizing the pool size. This class configures the behavior. In general\nclients should aim to have less than 50 concurrent RPCs per channel and at least 1 outstanding\nper channel per minute.\n\nThe settings in this class will be applied every minute. \n\nInheritance\n-----------\n\n[java.lang.Object](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html) \\\u003e ChannelPoolSettings \n\nInherited Members\n-----------------\n\n[Object.clone()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--) \n[Object.equals(Object)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-) \n[Object.finalize()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--) \n[Object.getClass()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--) \n[Object.hashCode()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--) \n[Object.notify()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--) \n[Object.notifyAll()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--) \n[Object.toString()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--) \n[Object.wait()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--) \n[Object.wait(long)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-) \n[Object.wait(long,int)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-)\n\nStatic Methods\n--------------\n\n### builder()\n\n public static ChannelPoolSettings.Builder builder()\n\n### staticallySized(int size)\n\n public static ChannelPoolSettings staticallySized(int size)\n\nConstructors\n------------\n\n### ChannelPoolSettings()\n\n public ChannelPoolSettings()\n\nMethods\n-------\n\n### getInitialChannelCount()\n\n public abstract int getInitialChannelCount()\n\nThe initial size of the channel pool.\n\nDuring client construction the client open this many connections. This will be scaled up or\ndown in the next period.\n\n### getMaxChannelCount()\n\n public abstract int getMaxChannelCount()\n\nThe absolute maximum size of the channel pool.\n\nRegardless of the current throughput, the number of channels will not exceed this limit\n\n### getMaxRpcsPerChannel()\n\n public abstract int getMaxRpcsPerChannel()\n\nThreshold to start scaling up the channel pool.\n\nWhen the average of the maximum number of outstanding RPCs in a single minute surpass this\nthreshold, channels will be added to the pool. For google services, gRPC channels will start\nlocally queuing RPC when there are 100 concurrent RPCs.\n\n### getMinChannelCount()\n\n public abstract int getMinChannelCount()\n\nThe absolute minimum size of the channel pool.\n\nRegardless of the current throughput, the number of channels will not drop below this limit\n\n### getMinRpcsPerChannel()\n\n public abstract int getMinRpcsPerChannel()\n\nThreshold to start scaling down the channel pool.\n\nWhen the average of the maximum number of outstanding RPCs in a single minute drop below\nthis threshold, channels will be removed from the pool.\n\n### isPreemptiveRefreshEnabled()\n\n public abstract boolean isPreemptiveRefreshEnabled()\n\nIf all of the channels should be replaced on an hourly basis.\n\nThe GFE will forcibly disconnect active channels after an hour. To minimize the cost of\nreconnects, this will create a new channel asynchronuously, prime it and then swap it with an\nold channel.\n\n### toBuilder()\n\n public abstract ChannelPoolSettings.Builder toBuilder()"]]