Running multiple threads for XOG at once could be memory consuming. We recommend to adjust your usage to avoid to run many XOG in the same time, and if possible to avoid separate connections (have XOG connect once and reuse the session)
Do not request many thousand rows at once, each request should be small, and each small request should be paginated. Otherwise there is possibility for a large request to time out and spin another request, that also times out etc.
Another option to improve your bandwidth could be to have a dedicate app server for XOG only.