Chuck, Robert, Chris,

I believe that this issue is finally resolved.  My system has been running 
flawlessly for most of two days now with the minimum and maximum pool sizes set 
to the defaults of 8 and 32 respectively.  It is still getting frequent hits by 
web crawlers and it is handling this with no problem.   So I'm prepared to just 
leave it at this.

After all that has been said and done, I suspect that the problem all along was 
that, after many months of running Glassfish with no maintenance, the system 
developed some internal glitch that made it create 250+ connection objects that 
weren't being removed.  But when I shut Glassfish down yesterday, deleted the 
.war file, and then restarted it with an empty domain, it reset itself and 
resumed running normally.  Anyway, this is my speculation at this point.

I did do a test today to see if the production version running on AWS will 
report thrown exceptions and found that it does.  As an experiment I put the 
line "float something = 1/0;" in the method that retrieves the list of 
countries and then ran my test query.  It retrieved the list of countries and 
output the expected "Other exception" message in the system.log file.  Based on 
this, I believe that the system was never throwing any exceptions.  There was 
some speculation that exceptions were being "swallowed", i.e., being thrown 
without any reports, but this doesn't seem to be happening.  The fact that I 
have never seen any such exception reports I take as confirmation that this was 
never the problem.

Also, before I ran my test today, which required replacing the current .war 
file with my test .war file, I checked the current contents of the JDBC pooling 
monitor and saw that the number of connections released equaled the number 
acquired, and the number of potential leaks was still at zero.  I take this as 
further confirmation that everything is now okay.

I do appreciate your observation that my JDBC pool size was abnormally high and 
that this was something that needed to be addressed.  Whether this had to do 
with my code changes or the issue I just described, I'm thankful for everyone's 
efforts and that the issue now seems to be resolved.

Best regards,

Dan

From: Chuck Caldarale <n82...@gmail.com>
Sent: Tuesday, August 19, 2025 1:33 AM
To: Tomcat Users List <users@tomcat.apache.org>
Subject: Re: [EXTERNAL EMAIL] How to access a REST service

> On 2025 Aug 18, at 21:22, Daniel Schwartz 
> <d...@danielgschwartz.com<mailto:d...@danielgschwartz.com>> wrote: > > I 
> wasn't resisting using the try-with-resources construct, only when I tried to 
> do this, I was getting compiler errors. But I evidently wasn't doing
NkdkJdXPPEBannerStart
Be Careful With This Message
From (Chuck Caldarale 
<n82...@gmail.com>)<https://godaddy1.cloud-protect.net/email-details/?k=k1&payload=53616c7465645f5f51a287f6939989554348daf64676e0bf5f4ffa1456b85165104baabd11d2f4f5bc0540d6b7871afb306ea1aca1c07fdba45a24a58aaaf383c3a1273ce3b65804c2246118bcb75f9a17caf373b92d7f2d854d41c3082963c5f125ae63845f041a91581d4953459459aa2c4234a2139a28123b2078ebbe1692068d6901194786f9343be17d758d90eb09e3dae7ff54cd3793b11432fdf9d37bd8db5d655c3c25c0886896cda9112c4fb9137c2d65eecb0c1a06af06bf9910a86cefb6cb06aeddf8c5b5c98eb750cbd2d035efc232ccb97a5a636e0ea51701e39e165cf615cbe618288fc0f3b7969034>
Learn 
More<https://godaddy1.cloud-protect.net/email-details/?k=k1&payload=53616c7465645f5f51a287f6939989554348daf64676e0bf5f4ffa1456b85165104baabd11d2f4f5bc0540d6b7871afb306ea1aca1c07fdba45a24a58aaaf383c3a1273ce3b65804c2246118bcb75f9a17caf373b92d7f2d854d41c3082963c5f125ae63845f041a91581d4953459459aa2c4234a2139a28123b2078ebbe1692068d6901194786f9343be17d758d90eb09e3dae7ff54cd3793b11432fdf9d37bd8db5d655c3c25c0886896cda9112c4fb9137c2d65eecb0c1a06af06bf9910a86cefb6cb06aeddf8c5b5c98eb750cbd2d035efc232ccb97a5a636e0ea51701e39e165cf615cbe618288fc0f3b7969034>
Potential Impersonation
The sender's identity could not be verified and someone may be impersonating 
the sender. Take caution when interacting with this message.

NkdkJdXPPEBannerEnd



> On 2025 Aug 18, at 21:22, Daniel Schwartz 
> <d...@danielgschwartz.com<mailto:d...@danielgschwartz.com>> wrote:

>

> I wasn't resisting using the try-with-resources construct, only when I tried 
> to do this, I was getting compiler errors.  But I evidently wasn't doing it 
> right, because I tried it again and this time it worked.

>

> Following is the new code for getting the list of countries.  It uses this 
> construct and in addition has an extra catch clause for any kind of 
> exception.  I have done this in all six places where a connection is being 
> created.

>

> I restarted Glassfish earlier today and dropped in the new .war file.  It has 
> been running for 6-8 hours now.  The log files show no evidence of any 
> exceptions being thrown.





When you’re running GlassFish in your production environment, is it running as 
a service? If so, you’re not going to see anything written via System.out (or 
System.err), unless GlassFish has an option to redirect that to its internal 
logging mechanism. Tomcat has such an option, and GlassFish started as a fork 
of Tomcat many years ago, so such an option may well exist.





> The current contents of the JDBC monitor page are copied below.  I don't know 
> how to interpret most of this, but I do note that the number of connections 
> released equals the number acquired.  Also, I have set the Connection Leak 
> Timeout to be 10 seconds, and the NumPotentialConnLeak is still at 0.





However, there are a couple of stats that might be a bit concerning: of the 20 
physical connections created, only 1 is free and 19 were destroyed. I would 
think that a pool would destroy connections only when it had to (eg, the 
connection is considered unsafe for reuse), although GlassFish does appear to 
have a mode where it discards connections after a while just in case. There’s 
also something odd with having only 1 free connection, since the pool is 
supposed to maintain a minimum of 8. Or were these statistics captured when the 
minimum was set to 1?





> In addition, I did some further experimenting with the pool size, and now I 
> find that if I set the minimum back to 8 and the maximum to 32, which are the 
> defaults, the system keeps running and doesn't output that "can't allocate 
> more connections" message.  For me this is very puzzling.  Did my code 
> changes have anything to do with this?





Not much else changed, so in all likelihood, yes. Note that the highest number 
of connections concurrently used is just 2, which is what we’d expect for an 
app like yours.





> Anyway, my interpretation of all this is as before, that there are no memory 
> leaks.  Is this correct?





There don’t appear to be any with your revised code, at least up to this point 
(other than perhaps those 19 destroyed connections), but  let it run for a few 
days and see what happens if the web crawlers start feeding garbage to your web 
service again.



  - Chuck





---------------------------------------------------------------------

To unsubscribe, e-mail: 
users-unsubscr...@tomcat.apache.org<mailto:users-unsubscr...@tomcat.apache.org>

For additional commands, e-mail: 
users-h...@tomcat.apache.org<mailto:users-h...@tomcat.apache.org>


Reply via email to