2011-12-20 35 views
-1

我们正在加载测试我们的Web应用程序(Java,Struts,Spring,Java EE)。结果表明,在发送给服务器的11000个奇数请求中,只有1500个奇数通过;其中大多数失败抛出SocketException。在Web应用程序上加载测试

这可能会发生什么原因?

我不知道应该在哪里寻找解决它。

+0

并发事务数量可能有限制吗?我以前有过,只需要改变参数。 – 2011-12-20 06:52:27

+0

堆栈跟踪告诉你什么? – rkb 2011-12-20 07:40:08

回答

2

这很可能是你压倒你的服务器。操作系统只会维护一个有界的连接队列,并且你的应用程序几乎可以肯定有一定数量的线程处理传入的连接。

我建议你开始记录有多少空闲处理线程的指标,以及(如果可以的话)操作系统队列中有多少挂起的连接。如果您始终拥有零空闲线程和OS队列达到或接近最大值,那么您知道自己已达到硬件和/或软件和/或数据库的限制。

您还应该观察操作系统的CPU和I/O负载指标。这可能有助于缩小瓶颈。如果你还没有最大化CPU,但你有很多的I/O等待,那么你需要优化I/O操作。如果你始终击中100%的CPU,那么你需要提高你的代码的效率或者投入更多的硬件。您还需要留意垃圾收集器,因为如果它开始旋转,那么会降低性能。

性能调整很难。你真的需要非常小心你的测量,但CPU负载,I/O等待,网络活动和内存消耗是一个好的开始。