Java 如何处理WebSphere中多个AJAX请求导致的高线程使用率
在压力测试期间,我被告知我需要减少应用程序的线程使用量 我们所有的其他应用程序都遵循每页1个请求的模式,而我创建了一个单页应用程序,在加载时触发8个AJAX请求 我运行的是WebSphere8.5.5.1(Servlet3.0) 我正在从浏览器向同一个Servlet发出8个AJAX请求,一个接一个,因此它们是并行的 Servlet基本上检查请求参数并通过http调用相应的ESB服务,然后返回响应 请纠正我,如果我在这里说的任何东西都是垃圾,因为我不是100%的对任何它 我的理解是,当请求到达Websphere时,它从线程池中获取一个线程,并使用该线程执行Servlet,并保持同一个线程,直到返回响应。我还认为线程在等待ESB响应时会阻塞。是这样吗 我正在考虑以下3个选项: 1) 在Servlet3.0中,使用异步Servlet所能做的最好的事情就是将请求放到队列中,并将线程返回到池中。然后,一个或多个线程将通过队列为请求提供服务。因此,我们只是将一个线程池替换为另一个线程池,但我们可以限制/控制第二个线程池的大小 如果我们有Servlet3.1(JSR340),我们可以使用ReadListener,我猜我们可以在等待ESB响应时避免线程阻塞 2) 在前端对AJAX请求进行排队,这样我就不会发出8个AJAX请求,而是发出3个请求,当它们完成时,就会发出下一个请求,以此类推,这样您就不会有超过3个并行请求 3) 向Servlet发出1个AJAX请求,让它调用所有8个ESB服务并合并结果 你能告诉我上述任何解决方案是否有效,我是否完全理解它们,并建议其他可能的解决方案吗Java 如何处理WebSphere中多个AJAX请求导致的高线程使用率,java,ajax,multithreading,websphere,threadpool,Java,Ajax,Multithreading,Websphere,Threadpool,在压力测试期间,我被告知我需要减少应用程序的线程使用量 我们所有的其他应用程序都遵循每页1个请求的模式,而我创建了一个单页应用程序,在加载时触发8个AJAX请求 我运行的是WebSphere8.5.5.1(Servlet3.0) 我正在从浏览器向同一个Servlet发出8个AJAX请求,一个接一个,因此它们是并行的 Servlet基本上检查请求参数并通过http调用相应的ESB服务,然后返回响应 请纠正我,如果我在这里说的任何东西都是垃圾,因为我不是100%的对任何它 我的理解是,当请求到达We
谢谢。尝试逐点回答:
onCompletion
将响应写回客户端
结论声明:
谢谢你纠正我的错误,曼尼什,我将马上阅读NIO的参考资料,并消化你的所有建议。很appreciated@user1810292不幸的是,这并不完全正确。尽管NIO允许连接20000个用户,但只有
pool max size
将同时处理。所以,如果您的请求很长,那么您肯定会遇到线程池饱和的问题。假设您的8个req中的每一个都需要1秒,那么您将能够处理大约6个并发客户端和50个线程池。其他请求将等待。谢谢。我明白你的意思。我想知道对于http请求来说,非阻塞和异步是否不是一回事。如果我使用另一个线程来处理对ESB的调用,并将原始线程释放回池中,我的新线程将被阻塞,因此这是毫无意义的。我真正需要做的是实现对ESB的非阻塞调用。这可以用netty或类似的工具来完成吗?我猜它需要在操作系统级别使用非阻塞套接字?基本上,我是在问如何执行非阻塞http请求并在Servlet中处理响应,以确保最大程度的线程重用?@Gas这就是我们建议在请求线程中“避免做任何阻塞操作”的原因。在这种情况下,请求线程被阻塞,等待ESB服务的响应。这主要是在IO上,可以解决。用户1810292:请看看你