-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Ayub,

On 5/31/20 09:20, Ayub Khan wrote:
> On single tomcat instance how to map each app to different port
> number?

You'd have to use multiple <Engine> elements, which means separate
everything and not just the <Connector>. It's more work on the Tomcat
side with the same problem of having a different port number which you
can get just by using a separate <Connector>.

Since you have a reverse-proxy already, it's simpler to use the
reverse-proxy as the port-selector and not worry about trying to
actually enforce it at the Tomcat level.

- -chris

> On Sun, 31 May 2020, 15:44 Christopher Schultz, <
> ch...@christopherschultz.net> wrote:
>
> Ayub,
>
> On 5/29/20 20:23, Ayub Khan wrote:
>>>> Chris,
>>>>
>>>> You might want (2) and (3) to have their own, independent
>>>> connector and thread pool, just to be safe. You don't want a
>>>> connection in (1) to stall because a loopback connection
>>>> can't be made to (2)/(3). Meanwhile, it's sitting there
>>>> making no progress but also consuming a connection+thread.
>>>>
>>>> *there is only one connector per tomcat where all the
>>>> applications
> receive
>>>> the requests, they do not have independent connector and
>>>> thread pool per tomcat. How to configure independent
>>>> connector and thread pool per application per tomcat instance
>>>> ? below is the current connector
> config in
>>>> each tomcat instance:*
>
> You can't allocate a connector to a particular web application --
> at least not in the way that you think.
>
> What you have to do if use different port numbers. Users will
> never use them, though. But since you have nginx (finally! A reason
> to have it!), you can map /app1 to port 8080 and /app2 to port 8081
> and /app3 to port 8083 or whatever you want.
>
> Internal loopback connections will either have to go through nginx
> (which I wouldn't recommend) or know the correct port numbers to
> use (which I *do* recommend).
>
> -chris
>
>>>> *<Connector port="8080"
>>>> protocol="org.apache.coyote.http11.Http11NioProtocol"
>>>> connectionTimeout="20000"               URIEncoding="UTF-8"
>>>> redirectPort="8443" />*
>>>>
>>>>
>>>>
>>>> On Fri, May 29, 2020 at 9:05 PM Christopher Schultz <
>>>> ch...@christopherschultz.net> wrote:
>>>>
>>>> Ayub,
>>>>
>>>> On 5/28/20 17:25, Ayub Khan wrote:
>>>>>>> Nginx is being used for image caching and converting
>>>>>>> https to http requests before hitting tomcat.
>>>> So you encrypt between the ALB and your app server nodes?
>>>> That's fine, though nginx probably won't offer any
>>>> performance improvement for images (unless it's really
>>>> caching dynamically-generated images from your application)
>>>> or TLS termination.
>>>>
>>>>>>> The behavior I am noticing is application first throws
>>>>>>> Borken pipe client abort exception at random apis
>>>>>>> calls followed by socket timeout and then database
>>>>>>> connection leak errors. This happens only during high
>>>>>>> load.
>>>>
>>>> If you are leaking connections, that's going to be an
>>>> application resource-management problem. Definitely solve
>>>> that, but it shouldn't affect anything with Tomcat
>>>> connections and/or threads.
>>>>
>>>>>>> During normal traffic open files for tomcat process
>>>>>>> goes up and down to not more than 500. However during
>>>>>>> high traffic if I keep track of the open files for each
>>>>>>> tomcat process as soon as the open files count reaches
>>>>>>> above 10k that tomcat instance stops serving the
>>>>>>> requests.
>>>>
>>>> Any other errors shown in the logs? Like OutOfMemoryError
>>>> (for e.g. open files)?
>>>>
>>>>>>> If the open file count goes beyond 5k its sure that
>>>>>>> this number will never come back to below 500 at this
>>>>>>> point we need to restart tomcat.
>>>>>>>
>>>>>>>
>>>>>>> There are three application installed on each tomcat
>>>>>>> instance,
>>>>>>>
>>>>>>> 1) portal: portal calls (2) and (3) using localhost,
>>>>>>> should we change this to use dns name instead of
>>>>>>> localhost calls ?
>>>>>>>
>>>>>>> 2) Services for portal 3) Services for portal and
>>>>>>> mobile clients
>>>>
>>>> Are they all sharing the same connector / thread pool?
>>>>
>>>> You might want (2) and (3) to have their own, independent
>>>> connector and thread pool, just to be safe. You don't want a
>>>> connection in (1) to stall because a loopback connection
>>>> can't be made to (2)/(3). Meanwhile, it's sitting there
>>>> making no progress but also consuming a connection+thread.
>>>>
>>>> -chris
>>>>
>>>>>>> On Thu, May 28, 2020 at 4:50 PM Christopher Schultz <
>>>>>>> ch...@christopherschultz.net> wrote:
>>>>>>>
>>>>>>> Ayub,
>>>>>>>
>>>>>>> On 5/27/20 19:43, Ayub Khan wrote:
>>>>>>>>>> If we have 18 core CPU and 100GB RAM. What value
>>>>>>>>>> can I set for maxConnections ?
>>>>>>> Your CPU and RAM really have nothing to do with it.
>>>>>>> It's more about your usage profile.
>>>>>>>
>>>>>>> For example, if you are serving small static files, you
>>>>>>> can serve a million requests a minute on a Raspberry
>>>>>>> Pi, many of them concurrently.
>>>>>>>
>>>>>>> But if you are performing fluid dynamic simulations
>>>>>>> with each request, you will obviously need more
>>>>>>> horsepower to service a single request, let alone
>>>>>>> thousands of concurrent requests.
>>>>>>>
>>>>>>> If you have tons of CPU and memory to spare, feel free
>>>>>>> to crank-up the max connections. The default is 10000
>>>>>>> which is fairly high. At some point, you will run out
>>>>>>> of connection allocation space in the OS's TCP/IP
>>>>>>> stack, so that is really your upper-limit. You simply
>>>>>>> cannot have more than the OS will allow. See
>>>>>>> https://stackoverflow.com/a/2332756/276232 for some
>>>>>>> information about that.
>>>>>>>
>>>>>>> Once you adjust your settings, perform a load-test. You
>>>>>>> may find that adding more resources actually slows
>>>>>>> things down.
>>>>>>>
>>>>>>>>>> Want to make sure we are utilizing the hardware
>>>>>>>>>> to the max capacity. Is there any config of
>>>>>>>>>> tomcat which enabled could help serve more
>>>>>>>>>> requests per tomcat instance.
>>>>>>>
>>>>>>> Not really. Improving performance usually come down to
>>>>>>> tuning the application to make the requests take less
>>>>>>> time to process. Tomcat is rarely the source of
>>>>>>> performance problems (but /sometimes/ is, and it's
>>>>>>> usually a bug that can be fixed).
>>>>>>>
>>>>>>> You can improve throughput somewhat by pipelineing
>>>>>>> requests. That means HTTP keepalive for direct
>>>>>>> connections (but with a small timeout; you don't want
>>>>>>> clients who aren't making any follow-up requests to
>>>>>>> waste your resources waiting for a keep-alive timeout
>>>>>>> to close a connection). For proxy connections (e.g.
>>>>>>> from nginx), you'll want those connections to remain
>>>>>>> open as long as possible to avoid the re-negotiation of
>>>>>>> TCP and possibly TLS handshakes. Using HTTP/2 can be
>>>>>>> helpful for performance, at the cost of some CPU on the
>>>>>>> back-end to perform the complicated connection
>>>>>>> management that h2 requires.
>>>>>>>
>>>>>>> Eliminating useless buffering is often very helpful.
>>>>>>> That's why I asked about nginx. What are you using it
>>>>>>> for, other than as a barrier between the load-balancer
>>>>>>> and your Tomcat instances? If you remove nginx, I
>>>>>>> suspect you'll see a measurable performance increase.
>>>>>>> This isn't a knock against nginx: you'd see a
>>>>>>> performance improvement by removing *any* reverse-proxy
>>>>>>> that isn't providing any value. But you haven't said
>>>>>>> anything about why it's there in the first place, so I
>>>>>>> don't know if it /is/ providing any value to you.
>>>>>>>
>>>>>>>>>> The current setup is able to handle most of the
>>>>>>>>>> load, however there are predictable times where
>>>>>>>>>> there is an avalanche of requests and thinking
>>>>>>>>>> how to handle it gracefully.
>>>>>>>
>>>>>>> You are using AWS: use auto-scaling. That's what it's
>>>>>>> for.
>>>>>>>
>>>>>>> -chris
>>>>>>>
>>>>>>>>>> On Wed, May 27, 2020 at 5:38 PM Christopher
>>>>>>>>>> Schultz < ch...@christopherschultz.net> wrote:
>>>>>>>>>>
>>>>>>>>>> Ayub,
>>>>>>>>>>
>>>>>>>>>> On 5/27/20 09:26, Ayub Khan wrote:
>>>>>>>>>>>>> previously I was using HTTP/1.1 connector,
>>>>>>>>>>>>> recently I changed to NIO2 to see the
>>>>>>>>>>>>> performance. I read that NIO2 is non
>>>>>>>>>>>>> blocking so trying to check how this
>>>>>>>>>>>>> works.
>>>>>>>>>>
>>>>>>>>>> Both NIO and NIO2 are non-blocking. They use
>>>>>>>>>> different strategies for certain things. Anything
>>>>>>>>>> but the "BIO" connector will be non-blocking for
>>>>>>>>>> most operations. The default is NIO.
>>>>>>>>>>
>>>>>>>>>>>>> which connector protocol do you recommend
>>>>>>>>>>>>> and best configuration for the connector ?
>>>>>>>>>> This depends on your environment, usage profile,
>>>>>>>>>> etc. Note that non-blocking IO means more CPU
>>>>>>>>>> usage: there is a trade-off.
>>>>>>>>>>
>>>>>>>>>>>>> Which stable version of tomcat would you
>>>>>>>>>>>>> recommend ?
>>>>>>>>>>
>>>>>>>>>> Always the latest, of course. Tomcat 8.0 is
>>>>>>>>>> unsupported, replaced by Tomcat 8.5. Tomcat 9.0
>>>>>>>>>> is stable and probably the best version if you
>>>>>>>>>> are looking to upgrade. Both Tomcat 8.5 and 9.0
>>>>>>>>>> are continuing to get regular updates. But
>>>>>>>>>> definitely move away from 8.0.
>>>>>>>>>>
>>>>>>>>>>>>> Are there any ubuntu specific configs for
>>>>>>>>>>>>> tomcat ?
>>>>>>>>>> No. There is nothing particular special about
>>>>>>>>>> Ubuntu. Linux is one of the most well-performing
>>>>>>>>>> platforms for the JVM. I wouldn't recommend
>>>>>>>>>> switching platforms.
>>>>>>>>>>
>>>>>>>>>> Why are you using nginx? You already have
>>>>>>>>>> load-balancing happening in the ALB. Inserting
>>>>>>>>>> another layer of proxying is probably just adding
>>>>>>>>>> another buffer to the mix. I'd remove nginx if
>>>>>>>>>> it's not providing any specific, measurable
>>>>>>>>>> benefit.
>>>>>>>>>>
>>>>>>>>>>>>> We are using OkHttp client library to call
>>>>>>>>>>>>> rest api and stack trace shows failure at
>>>>>>>>>>>>> the api call. The api being called is
>>>>>>>>>>>>> running on the same tomcat instance
>>>>>>>>>>>>> (different context) usring url localhost.
>>>>>>>>>>>>> This does not happen when number of
>>>>>>>>>>>>> requests is less.
>>>>>>>>>>
>>>>>>>>>> Your Tomcat server is calling this REST API? Or
>>>>>>>>>> your server is serving those API requests? If
>>>>>>>>>> your service is calling itself, then you have to
>>>>>>>>>> make sure you have double-capacity: every
>>>>>>>>>> incoming request will cause a loopback request to
>>>>>>>>>> your own service.
>>>>>>>>>>
>>>>>>>>>> Other than the timeouts, are you able to handle
>>>>>>>>>> the load with your existing infrastructure?
>>>>>>>>>> Sometimes, the solution is simply to throw most
>>>>>>>>>> hardware at the problem.
>>>>>>>>>>
>>>>>>>>>> -chris
>>>>>>>>>>
>>>>>>>>>>>>> On Wed, May 27, 2020 at 11:48 AM Mark
>>>>>>>>>>>>> Thomas <ma...@apache.org> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> On 26/05/2020 23:28, Ayub Khan wrote:
>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> During high load I am seeing below
>>>>>>>>>>>>>>> error on tomcat logs
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> java.util.concurrent.ExecutionException:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
java.net
>>>>>>>>>>>>>> .SocketTimeoutException:
>>>>>>>>>>>>>>> timeout
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> And the rest of that stack trace? It is
>>>>>>>>>>>>>> hard to provide advice without context.
>>>>>>>>>>>>>> We need to know what is timing out when
>>>>>>>>>>>>>> trying to do what.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> We have 4 C5.18x large vms running
>>>>>>>>>>>>>>> tomcat 8 behind AWS application load
>>>>>>>>>>>>>>> balancer. We are seeing socket timeouts
>>>>>>>>>>>>>>> during peak hours. What should be the
>>>>>>>>>>>>>>> configuration of tomcat if we get
>>>>>>>>>>>>>>> 60,000 to 70,000 requests per
>>>>>>>>>>>>>> minute
>>>>>>>>>>>>>>> on an average ?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Tomcat 8.0.32 on Ubuntu 16.04.5 LTS
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Tomcat 8.0.x is no longer supported.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Below is the java version:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> java version "1.8.0_181" Java(TM) SE
>>>>>>>>>>>>>>> Runtime Environment (build
>>>>>>>>>>>>>>> 1.8.0_181-b13) Java HotSpot(TM) 64-Bit
>>>>>>>>>>>>>>> Server VM (build 25.181-b13, mixed
>>>>>>>>>>>>>>> mode)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Below is the server.xml connector
>>>>>>>>>>>>>>> configuration:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> <Connector port="8080"
>>>>>>>>>>>>>>> protocol="org.apache.coyote.http11.Http11Nio2Protocol"
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>
>>>>>>>>>>>>>>>
>
>>>>>>>>>>>>>>>
Why NIO2?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Mark
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> connectionTimeout="20000"
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> URIEncoding="UTF-8" redirectPort="8443"
>>>>>>>>>>>>>>> />
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> We have 4  C5.18x large vms and each vm
>>>>>>>>>>>>>>> has nginx and tomcat instance running.
>>>>>>>>>>>>>>> All the 4 vms are connected to AWS
>>>>>>>>>>>>>>> application load balancer.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I tried to add maxConnections=50000 but
>>>>>>>>>>>>>>> this does not seem to have any affect
>>>>>>>>>>>>>>> and still saw the timeouts
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thanks and Regards Ayub
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ---------------------------------------------------------
- ---
>
>>>>>>>>>>>>>>
- ---
>>>>
>>>>>>>>>>>>>>
> ---
>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>> ---
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>> To unsubscribe, e-mail:
>>>>>>> users-unsubscr...@tomcat.apache.org
>>>>>>>>>>>>>> For additional commands, e-mail:
>>>>>>>>>>>>>> users-h...@tomcat.apache.org
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ------------------------------------------------------------
- ---
>
>>>>>>>>>>>
- ---
>>>>
>>>>>>>>>>>
> ---
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>>>>>>>> For additional commands, e-mail:
>>>>>>>>>>> users-h...@tomcat.apache.org
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>>> ---------------------------------------------------------------
- ---
>
>>>>>>>>
- ---
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>
>>>>>>>>
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>>>>> For additional commands, e-mail:
>>>>>>>> users-h...@tomcat.apache.org
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>>
>>>>>
>>>>> ------------------------------------------------------------------
- ---
>>>>>
>>>>>
>
>>>>>
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>> For additional commands, e-mail:
>>>>> users-h...@tomcat.apache.org
>>>>>
>>>>>
>>>>
>>
>> ---------------------------------------------------------------------
>>
>>
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>
>>
>
-----BEGIN PGP SIGNATURE-----
Comment: Using GnuPG with Thunderbird - https://www.enigmail.net/

iQIzBAEBCAAdFiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAl7VAhQACgkQHPApP6U8
pFjsLxAAnoJRxvynux8z1JpmC1H3BGJ1rNPmKflhkibEMmbInEprkQtz80AHcyvJ
3n3/itLD0VekxHMxUyIl3urHRqZh2MwxSRksITjyYXxok4R/UOW6noO2vCNiY1G8
hn+EYGe2y5DTpBwh1Utk6Wy0bm8KD+xGP09IoMp4fmx3DNnL99mL9KbSxl9qJHSs
G0YwAK2uTYx6IkFPUpjVso48H2B8C/8YsJYS13WJEnEoPK7xQRyKPPtoCFSD6WEE
vY4OZQdLorK0FRLEBeXh1Bqv6BUeLf7DYKB2oB4ph4PBi7Dnlb3od8pnMUAEzOVf
9jTZQnOdpZPMlA0yI6yzI4e819OETT4IpLUQHx98LojD9CQsH6RR05WftrcqqJE1
hnwEmBaIsSIzaXJm/qtN/juxnKqMwMeUMTNBMuB8OMR3HrFQuV/zlwK89cQfSy6E
Sa3lFyarJyyLkgTXgEtLzKItiz5YqjekPZBDM8UNjXjE8dyt78nxMBSZhRj+cz/T
fGzT6CCf1PkSmoJ6g0TZ1sNm2A4aqiVDL4i1TinTWfPz2IpYJOIe9JaddTE14Fu2
oC/TtFuKINM4flreTT+30TOIo0ZGEsplNLoyZWmAnYtEoeR2Sb0uBYVIlco+X+sq
UAIW1fldxReljlAdnTGp+nrmizH+NMiCIbHDzoQmc82jNFjm3SU=
=wBrc
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to