java - Full GC real time is much more that user+sys times -


We are running on JBoss with the approved maximum heap size of GB on a Web Java-based applications 1.2 (total machine Physical memory is 2 GB). At some point the application stops responding (to customers) for several minutes. After some analysis, we came to know that the culprit is full GC. Here is an excerpt from a verbose GC log:

74477.402: [Full GC [PSYoungGen: 3648K-> 0K (332160K)] [PSOldGen: 778476K-> 589497K (819200K)] 782124K-> 589497K (1151360K) [PSPermGen: 102671K-> 102671K (171328K)], 646.1546860 seconds] [ Times: user = 3.84 sys = 3.72, fixed = 646.17 seconds ]

what I do not understand Now how is it possible that the real time is spent on full GC is about 11 minutes (646 seconds), while user + sys times is just 7.5 seconds. For 7.5 seconds, I spend more than 200 MB cleaning up the old generation to take more logical time. Where does all the other time go?

Thank you very much. After

The other time?

It is most likely that your application is running virtual memory threshold. Basically, your application requires more pages of virtual memory, because the physical pages to catch them available. Consequently, it is spending more time waiting for the vm pages and written on the disc.

For more information, read.

The treatment is to reduce either virtual memory usage or increase the amount of physical memory on the system. For example, you can:

  • Run less applications on the machine,
  • The Java application reduces the size of the pile, or
  • , then you Running into one virtual, allocation of virtual memory increases. (Note that reducing the JVM heap size can be a double-edged sword. If you do a lot of size of the pile, then the application will either be outoffed by my errors, many collect more garbage, or things are not able to cash effectively.)


Comments

Popular posts from this blog

windows - Heroku throws SQLITE3 Read only exception -

lex - Building a lexical Analyzer in Java -

python - rename keys in a dictionary -