我们负载测试我们的Web应用程序(Java,Struts,Spring,Java EE)。结果表明,在发送到服务器的11,000多个请求中,只有1500多个通过;其中大多数都无法抛出SocketException。
可能出现这种情况的原因是什么?
我不知道在应用程序中查找修复它的位置。
答案 0 :(得分:2)
您可能只是压倒了您的服务器。操作系统只维护一个有限的挂起队列,你的应用程序几乎肯定有一个有限数量的线程来处理传入的连接。
我建议你开始记录你有多少空闲处理线程的指标,以及(如果可以的话)操作系统队列中有多少挂起连接。如果您始终拥有零空闲线程和最大或接近最大值的操作系统队列,那么您就知道您已经达到了硬件和/或软件和/或数据库的限制。
您还应该观察操作系统的CPU和I / O负载指标。这可能有助于缩小瓶颈的范围。如果您没有超出CPU但是有很多I / O等待,那么您需要优化I / O操作。如果你持续达到100%CPU,那么你需要让你的代码更高效或者为它投入更多的硬件。你还需要关注垃圾收集器,因为如果它开始旋转那么会降低性能。
性能调整很难。你真的需要非常小心测量,但CPU负载,I / O等待,网络活动和内存消耗是一个良好的开端。