Java应用服务器性能

我在Sun Application Server 8.1(又名SJSAS,Glassfish的前身)上运行了一个有点过时的
Java EE应用程序.有500个并发用户,应用程序变得慢得令人无法接受,我正在尝试帮助确定大部分执行时间花在哪里以及可以采取哪些措施来加快速度.到目前为止,我们一直在使用LoadRunner,应用服务器日志,Oracle statpack,snoop,调整应用服务器接受器和会话(工作线程)线程,调整Hibernate批量大小和连接获取使用等进行实验和测量,但经过一些初步收益我们正在努力改善问题.

好的,通过对问题的介绍,这是一个真正的问题:如果你的CPU和内存使用率从未超过20%的盒子上运行的Java EE应用程序速度慢,而且在运行500个用户时你会看到两件事:1)在同一个应用服务器中请求甚至静态文件JVM进程非常慢,2)在应用服务器JVM进程之外请求静态文件但是在同一个盒子上很快,你会调查什么?

我的想法最初跳转到应用程序服务器线程,包括接受器和会话线程,认为即使对静态文件的请求正在排队,等待可用的线程,如果CPU /内存没有真正征税,那么更多的线程按顺序排列.但随后我们大幅提升了接受者和会话线程,并没有任何改进.

澄清编辑:

1)静态文件应由Web服务器而不是应用服务器提供.我使用的事实是,在我们的情况下,这(不幸的是)不是配置,以便我可以看到它不执行的文件的应用程序服务器性能 – 因此排除任何数据库性能成本等.

2)我认为请求者和应用服务器之间没有代理,但即使它没有被重载,因为从同一个应用服务器机器请求但在应用程序的JVM实例之外的静态文件立即返回.

3)JVM堆大小(Xmx)设置为1GB.

谢谢你的帮助!

最佳答案 SunONE本身就是一个痛苦的屁股.我有一个同样的问题,你知道吗?将同一应用程序简单地重新部署到Weblogic可将内存消耗和CPU消耗降低约30%.

SunONE是一个参考实现服务器,不应该用于生产(不了解Glassfish).

我知道,这个答案并没有什么帮助,但我注意到即使在非常简单的操作中也会出现相当多的停顿,例如从池中获取bean实例.

可能是,尝试在同一台机器上部署JBoss或Weblogic会给你一个提示吗?

附:您不应该从应用程序服务器下提供静态内容(尽管我有时也会这样做,当CPU很丰富时).

P.P.S. 500个并发用户的负载相当高,我明确地将SunONE置于缓存代理或提供静态内容的Apache之后.

点赞