Something wierd seems to be going on... I have an application on tomcat that 
used to be on a physical windows server 2008 standard 32-bit which I p2v'd with 
vmware converter over as a VM. I'm upgrading the server to windows server 2008 
r2 64bit and instead of doing an inplace, I'm just building another one up and 
doing parallel side by side, and its a fresh VM from the start, no p2v 
stuff.... 

The strange part is I was able to set a max memory in the tomcat9w.exe 
configuration tool to about 1600 Megabytes and that was the hitting of the wall 
on that setup (the original physical one that I p2v'd to a VM), I can set less 
ram, but I cannot set it more than 1600 otherwise when I try to start the 
tomcat service in services.msc it will just crap outs. 

So my thinking was since I have to stay on 32-bit of tomcat and 32-bit of Java 
JVM anyhow (long story...) that it might be better to put it in a 64-bit OS 
(server 2008r2) rather than the standard 32bit of server 2008. Long story 
short, from a fresh VM, on this box I'm only able to set a max total ram in 
tomcatw as around 1000 m (1GB) and if I set anymore it will not start, as in I 
cannot get tomcat service to start... so the wall is around 1GB...

As a test, I installed the tomcat (zip extract, not using msi or exe installer) 
to my own client workstation laptop running the latest windows 10 1809 etc and 
once again I hit the 1GB wall and cannot even get it to go up to 1.6GB, even 
though I have like 16GB ram on my laptop machine...

I have googled this for a long time and apparently it has to do with the way 
the operating system itself (in this case windows, be it windows server 2008 
std, 2008 r2, or win10 etc) handles per process memory limitations and thread 
memory allocations that by default only allow around 1.5 to 2 g of ram per 
process and that this is what is constraining the tomcat apache jvm and not the 
programs itself.... 

But if this is indeed an OS difference, I checked on my original 32bit 
server2008 std, the one that I did P2V, and it didn't have anything special set 
in the boot.ini or any bcdedit parameters that allow it to see more ram per 
process nor anything like a /3GB flag etc etc

The only other thing I can think of is that maybe there is a difference between 
a VM and a physical raw bare metal box in how it allocates ram, and that I can 
get more contigous memory that tomcat/jvm requires when running on a 32bit OS 
on a physical box as opposed to and compared to a 64bit OS in a VM?

Why is it I can get the exact same version of Tomcat (bit by bit the same) to 
handle up to 1600m in 32bit version of server 2008 but on server 2008r2 64bit 
or even server 2016 64bit I can only get tomcat to do up to around 1GB total 
max? They are both using the same Java version jvm etc etc etc


Reply via email to