我在 Tomcat8.5 上运行某个 Java 应用程序,该应用程序通过 JNI 调用包含较长关键部分(大约需要 1 秒)的 C++ 代码。因此,如果服务器意外地同时收到来自客户端的大量请求(~1000 或更多),JVM 就会调用许多工作线程,从而导致客户端出现非常长的延迟(几分钟)。
为了防止上述情况,我该如何配置服务器(Windows 2016)、Tomcat 或 JVM 参数?
Java 应用程序和 C++(DLL)是黑盒,我无法修改它们的代码。
我的想法是在 Tomcat 的工作线程接受传入请求之前以某种方式插入延迟(随机毫秒),以便分解关键部分。
请给我一些关于网络和 Tomcat 配置的建议。
答案1
这行不通。如果同时收到约 1000 个请求,并且处理每个请求需要约 1 秒的临界区,那么处理所有这些请求将需要约 1000 秒。几毫秒的延迟不会有帮助。
如果不知道该 DLL 的具体功能,就很难提供可能有效的替代方法的建议。