我有一个非常简单的Java REST服务。在较低的流量下,该服务运行良好,响应时间约为1毫秒,服务器积压为零。
当流量超过某个阈值时,响应时间从1毫秒猛增到2.0秒,http活动会话队列和打开文件计数峰值,服务器执行速度令人无法接受。我发布了一个典型的六小时窗口的度量图表,其中流量开始较低并超过了问题阈值。
关于可能导致这种情况或如何进一步诊断的任何想法?
答案 0 :(得分:0)
您的webapp将使用一个线程(从线程池借用)来为一个请求提供服务。
在压力负载下,会创建许多线程,如果请求数超过池容量,则必须排队,等待线程再次从池中恢复。
如果您的服务运行速度不够快,(特别是您正在进行IO - 打开文件),等待时间会增加,导致响应缓慢。
CPU必须在多个线程之间切换,因此CPU将在负载下飙升。
这就是他们需要负载平衡和许多webapp到服务器作为服务的原因。压力负荷分配给许多子网络,以改善最终用户体验
答案 1 :(得分:0)
通常的诊断方法是使用JMeter创建负载并使用Java VisualVM,Eclipse内存分析器等调查结果。我不知道你是否尝试过它。