Java Glassfish web应用程序运行缓慢
我有一个运行在glassfish 3.1.2中的web应用程序。web应用程序运行缓慢。我无法理解原因。在jvm选项中:-Xmx8192m,-XX:MaxPermSize=3072m 最高命令是:Java Glassfish web应用程序运行缓慢,java,performance,memory,glassfish,jvm,Java,Performance,Memory,Glassfish,Jvm,我有一个运行在glassfish 3.1.2中的web应用程序。web应用程序运行缓慢。我无法理解原因。在jvm选项中:-Xmx8192m,-XX:MaxPermSize=3072m 最高命令是: Mem: 16269852k total, 16188212k used, 81640k free, 202544k buffers Swap: 8208376k total, 937308k used, 7271068k free, 5715516k cached P
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屏幕截图:
谢谢,您的最大烫发尺寸太大了。在屏幕截图中,它仅使用略高于300MB的数据,因此将最大大小设置为略高于3GB实际上没有什么作用。您可以显式设置所需的烫发发电机大小,但这不是一个好主意 其次,堆的大小看起来太大了。在该屏幕截图中,您永远不会达到5GB,即使最大大小为8GB。最好不要将堆的大小设置为超出需要的大小。如果你的应用程序有漏洞,或者只是堆耗尽,你会发现它的影响要严重得多。当设置堆的大小时,将Xmx max和Xms min设置为相同的值,这将阻止堆调整大小 在VisualGC选项卡中可以更好地看到这一点。在我看来,您看到的垃圾收集只是年轻的GC,这不应该引起关注。当你在应用程序缓慢的背景下考虑GC时,首先要看的是暂停时间——每次完整GC需要多长时间,因为它们会暂停你的应用程序 应用程序运行缓慢的可能原因可能是多方面的。例如,这可能是由于资源争用造成的——可能是您的JDBC连接池不够大,或者您的应用程序正在泄漏连接
至于Top中的内存使用情况,请注意您是按%CPU列排序的,而不是按%Mem列排序的,因此首先要查看该列。还要运行探查器以查看时间和内存的使用情况。不加选择地使用String.intern可能会导致permgen空间被充分利用。我会这样做的。但使用的permgen空间仍然是300MB,占maxperm gen总空间3072m的10%。如果需要更多的permgen空间,它仍然可以分配。如何降低系统的速度?我将减少堆和perm gen的最大大小。使用的jdbc连接数大约是最大值的30%。我认为连接没有泄漏,因为连接数不是单调增加的。使用的文件描述符也是最大值的50%。我找不到任何web应用程序可能会变慢的资源。JDBC连接只是猜测,更多的是这里可能存在问题的范围非常广泛的一个例子。你能描述一下你看到的那种缓慢吗?盲目地减少堆的大小未必有帮助。性能调优是基于数据而不是直觉做出决策,因此理想情况下,您需要看到系统所有方面的一个多星期的长期视图。
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.