我有一个REST API,该API有望收到较大的有效载荷作为请求主体。 API调用了一种阻塞方法,该方法需要2秒钟来处理每个请求,然后返回200 OK
。我希望基于可用内存进行限制,以便在可用内存低于阈值时API返回429 Too Many Request
。
当满足阈值条件时,我希望立即拒绝后续请求,即使在将大请求有效负载加载到我的应用程序内存中之前也是如此。这也将使我免受拒绝服务攻击。
在Java EE,Tomcat环境中,如果我使用Filter
来检查可用内存,那么我知道完整的请求已加载到内存中。那么是否最好在ServletRequestListener.requestInitialized
方法中添加check,以便即使在应用收到请求之前我也可以拒绝该请求?
P.S。我使用以下公式基于this SO post计算可用内存:
long presumableFreeMemory =
Runtime.getRuntime().maxMemory()
- Runtime.getRuntime().totalMemory()
+ Runtime.getRuntime().freeMemory();