Chris, As you described I have added two new connectors in server.xml and using nginx to redirect requests to different connector ports. Also configured nginx to route traffic of each app on a different connector port of tomcat
In config of each app I am using port specific for the app which is being called localhost:8081 for app2 and localhost:8082 for app 3 So now in config of app1 we call app2 using localhost:8081/app2 and localhost:8082/app3 Could you explain the benefit of using this type of config? Will this be useful to not block requests for each app? On Mon, 1 Jun 2020, 16:27 Christopher Schultz, <ch...@christopherschultz.net> wrote: > -----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 > >