With 1.3 and 1.4 JVM’s you do NOT need to schedule System.gc(). You will actually do more harm than good in most cases. Search for extensive posts on performance tuning involving JVM settings.
Looks like I’ve opened a real can of worms here :-))
My thinking now is;-
change the thread pool settings as detailed above
leave out the gc piece
find info regarding tuning JVM ( our version is 1.3.0) - is the JVM version the same as what is described as ‘Java Version’ in the About screen via the Admin panel?
not sure why we have specifically 1.4Gb allocated but I’ve heard lots regarding limits of memory that can be allocated to JVM and/or used under Win2000
Hi Steve,
you can look at historical thread usage data by going through the stats.log
Notice that the information in there is all in HEX.
My preference regarding the GC will be to set it up and see if it helps your case or not. If it doesnt, just remove it from the scheduler.
Sorry Mark, for the above statement. We really are deadhorses, who dont get affected by beating!! My limited practical experience suggests that GC helps more often than not. So whats the harm in trying!
And Steve, definitely change the thread pool settings.
I’m always willing to be convinced by detailed, factual evidence. No one advocating scheduling of System.gc() for IS 4.6 and later using a 1.3x or 1.4x JVM) has ever produced anything other than anecdotal evidence (e.g. “it helped me”).
Turn on -verboseGC, run some load tests with an without scheduled System.gc() and back up your claims with evidence shown by the resulting graphs and I’ll be persuaded.
When you take the time to understand how garbage collection works in modern JVM’s its pretty easy to see why forcing manual GC’s does not help and can certainly hurt your performance. In the same way, setting your heap size far larger than you actually need can hurt, not help, performance.
You are free to disagree and to continue to repeat performance tuning urban legends, but back up your positions with fact. I have done so in previous posts and won’t do so AGAIN here.
Hi Mark,
I fully agree with you on “setting heap size far larger than actually needed can hurt pretty badly”. Just because your server has available memory doesnt imply give it all to the integration server instance.
I firmly believe in doing performance tests to understand ones need for heap size requirement.
As far as GC is concerned, I wouldnt be able to give you factual detailed evidence on my experience. But I have seen reduction in problem incidents related to outofmemory errors, slow execution of flow svcs etc if the server has scheduled GC. Obviously, on the day I set up the scheduler, probably users of the system were napping or reduction in errors were due to some other cause.
I understand these are cause-n-effect beliefs (without “proven” facts). But to me, as an administrator who doubles as developer too at times, its easy to set up GC and monitor the performance for any adverse effect. And, do the code cleanup later whenever one have time. To me, this has worked fairly well and i intend to carry forward my experience.
And remembering this that not all code is written by programmers. since webM itself is in java, one can never compensate any un-intensional errors there. Though, I am sure, such code goes through much better QA and review process.
I would hope that some day I will run some test scenario and prove you right on this, and remove my membership from the dead horse society which thinks “GC works”.
I have implicitly learnt a lot from you over past years through wMUsers and would like to continue the process. Hoping to run test scenario soon to prove myself otherwise.
? TotalMem: The total amount of memory available to the Java virtual machine
? FreeMem: The amount of unused memory that is currently available to the Java virtual machine.
? CurT: The number of system threads currently active.
? MaxT: The highest number of system threads that have ever been active concurrently on the server.
? SSNs: The number of sessions currently active
? SSNx: The highest number of sessions that were active concurrently on the server
? SSNAvg: The average length of a session lifetime.
? REQs: The number of service requests currently executing
? REQx: The maximum number of service requests concurrently executing during the last poll cycle (1 minute) service requests during the last poll cycle (1 minute)
? REQAvg: (this field is what was missing in that advantage article)
? StartReq: The number of service requests that started during the last poll cycle (1 minute)
? EndReq: The number of service requests that terminated during the last poll cycle (1 minute).
As Andre suggested, these are the params you can use: watt.server.stats.avgTime
Specifies the time period (in seconds) for which performance metrics are averaged. The default is 10. watt.server.stats.logfile
Specifies the name of the file to receive statistics. The default is logs\stats.log. watt.server.stats.pollTime
Specifies the number of seconds between updates of statistics loggings. The default is 10.
But, the caveat is that despite on my server the setting being default (10 seconds), the entries in logs are generated every 1 minute only.
If you want the entries in logs being generated say every 10 seconds or every 5 minutes, I guess a tweak to any of these settings wont help.
I am not sure if thats what you were looking for. Let us know.