Glassfish网络应用程序运行缓慢

时间:2015-03-03 08:02:25

标签: java performance memory glassfish jvm

我有一个在glassfish 3.1.2中运行的网络应用程序。网络应用程序运行缓慢。我无法理解原因。在jvm选项中:-Xmx8192m,-XX:MaxPermSize = 3072m。

top命令给出:

Mem:  16269852k total, 16188212k used,    81640k free,   202544k buffers
Swap:  8208376k total,   937308k used,  7271068k free,  5715516k cached



  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                    
13037 root      20   0 13.5g 8.4g  65m S 114.7 54.3   9899:38 java                                                                                                      
13495 root      20   0 15288 1448  900 R 41.5  0.0 489:51.24 top                                                                                                        
29747 root      20   0  197m 2544 1524 R 36.6  0.0 449:20.08 mysql                                                                                                      
 8390 root      20   0 1693m 235m  20m S  3.3  1.5   1:12.61 java                                                                                                       
24987 user1     20   0  151m  52m 7092 S  1.3  0.3  38:13.69 Xvnc                                                                                                       
   12 root      20   0     0    0    0 S  1.0  0.0  17:31.10 events/1                                                                                                   
 7386 user1     20   0  304m  12m 7040 S  0.7  0.1   0:23.11 gnome-terminal                                                                                             
 8705 root      20   0 15276 1472  952 R  0.7  0.0   0:05.95 top                                                                                                        
    4 root      20   0     0    0    0 S  0.3  0.0   2:10.46 ksoftirqd/0                                                                                                
 1933 root      20   0 64116  624  524 S  0.3  0.0   5:27.69 sshd                                                                                                       
31445 mysql     20   0 1862m 335m 6280 S  0.3  2.1   4213:09 mysqld                                                                                                     
    1 root      20   0 19352 1208  996 S  0.0  0.0   1:05.27 init                                                                                                       
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.09 kthreadd   

free -g
             total       used       free     shared    buffers     cached
Mem:            15         15          0          0          0          5
-/+ buffers/cache:          9          5
Swap:            7          0          6

jvisualvm截图: enter image description here

enter image description here

What can be the possible reason of slowness?
Why is gc consuming cpu even though the allocated max heap and max perm gen space is higher? 
Why is 99.5% RAM being used although the processes in top are not consuming much space? 
After restarting glassfish it runs fast, the ram consumption is slow.

谢谢,

1 个答案:

答案 0 :(得分:0)

你的最大permgen大小太大了。在屏幕截图中,它仅使用300MB以上,因此将最大大小设置为超过3GB并不会有太大作用。您可以明确设置所需的perm gen大小,但这不是一个好主意。

其次,您的堆大小看起来太大了。即使最大大小为8GB,您仍然无法在该屏幕截图中达到5GB。最好不要将堆的大小设置为大于您需要的大小。如果您遇到漏洞应用程序的问题,或者只是堆耗尽,您会发现它的影响要严重得多。当您设置堆的大小时,将Xmx(最大值)和Xms(min)都设置为相同的值,这将阻止堆调整大小。

更好的视图是在Visual GC选项卡中。在我看来,你所看到的垃圾收集只是年轻的GC,这应该不值得关注。当您在应用程序运行缓慢的情况下考虑GC时,首先要考虑的是暂停时间 - 每个完整GC需要多长时间,因为它们会暂停您的应用程序。

您的应用程序缓慢的可能原因可能是许多事情中的任何一个(或更多)。例如,可能是由于资源争用 - 可能是您的JDBC连接池不够大,或者您的应用程序正在泄漏连接。

至于Top中的内存使用情况,请注意您已按%CPU列排序,而不是%Mem列,因此首先要查看它。