Has anyone experienced the server hanging before

Steve,
search wmusers.com for any info on GC.
keywords: Garbage Collection, System.gc, gc

Once these changes are in place, monitor the Service and System Threads (both current/peak) to see if you need to increase the Thread pool further.

Is there any specific reason to have 1.4GB assigned?

<beatingDeadHorse>

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.

</beatingDeadHorse>

Hello all,

Looks like I’ve opened a real can of worms here :-))

My thinking now is;-

  1. change the thread pool settings as detailed above

  2. leave out the gc piece

  3. 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?

  4. 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

I’ve also just checked the threads on this server as follows:-

Service threads - current 78, peak 164
System threads - current 143, peak 146

and the current settings are:-

Server Thread Pool
Maximum Threads 75
Minimum Threads 10

Scheduler Thread Pool
Maximum Threads 30

I presume that the service threads correspond to the scheduler thread pool and the system threads correspond to the server thread pool.

Is there also a process to produce historical thread usage data as per the stats detailed above?

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.

take it easy. let us know of the progress.

Saurabh.

Dead Horse Society,

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.

Mark

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.

Best Regards,
Saurabh.

PS: I see that in Java 1.5 Beta 2 they have MemoryMXBean to make this process easier.
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/MemoryMXBean.html

And Steve,
here is the article on advantage for “What do the fields in the IS stats log files mean?

HTH.

  • Saurabh.

Hi there,

We’ve been testing exporting this data into Excel format, etc and all looks fine.

However, the article states that there are 11 fields plus the timestamp but we have 12. They all make sense except the last unidentified field.

All ideas would be appreciated? Steve.

Hi Steve,
Here is what it should have been:


? 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).

Hope this answers your question,
Saurabh.

Hello all,

One last question on this subject.

Is there a way to change the polling cycle frequency of the stats.log?

Thanks in advance,

Steve.

Integration Server Administrators Guide, Appendix B: Server Configuration Parameters File. Check for “watt.server.stats”.

Hi Steve,
FYI…

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.

  • Saurabh.