我有一个在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截图:
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.
谢谢,
答案 0 :(得分:0)
你的最大permgen大小太大了。在屏幕截图中,它仅使用300MB以上,因此将最大大小设置为超过3GB并不会有太大作用。您可以明确设置所需的perm gen大小,但这不是一个好主意。
其次,您的堆大小看起来太大了。即使最大大小为8GB,您仍然无法在该屏幕截图中达到5GB。最好不要将堆的大小设置为大于您需要的大小。如果您遇到漏洞应用程序的问题,或者只是堆耗尽,您会发现它的影响要严重得多。当您设置堆的大小时,将Xmx
(最大值)和Xms
(min)都设置为相同的值,这将阻止堆调整大小。
更好的视图是在Visual GC选项卡中。在我看来,你所看到的垃圾收集只是年轻的GC,这应该不值得关注。当您在应用程序运行缓慢的情况下考虑GC时,首先要考虑的是暂停时间 - 每个完整GC需要多长时间,因为它们会暂停您的应用程序。
您的应用程序缓慢的可能原因可能是许多事情中的任何一个(或更多)。例如,可能是由于资源争用 - 可能是您的JDBC连接池不够大,或者您的应用程序正在泄漏连接。
至于Top中的内存使用情况,请注意您已按%CPU列排序,而不是%Mem列,因此首先要查看它。