Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java/Netty文件上载REST服务的GC选择_Java_Rest_File Upload_Garbage Collection_Netty - Fatal编程技术网

Java/Netty文件上载REST服务的GC选择

Java/Netty文件上载REST服务的GC选择,java,rest,file-upload,garbage-collection,netty,Java,Rest,File Upload,Garbage Collection,Netty,我有一个Java REST服务,它运行在Netty上,用于上传(流式传输)5MB到500MB的大量文件。当我在某个时间点增加并发上载的数量时,应用程序的内存会耗尽,这是意料之中的,但我正在寻找在此场景中应该使用哪些Java GC和VM设置来提高性能和减少内存占用的建议。 如果有人能分享类似的经历,我将不胜感激 更新:要为问题添加更多上下文,REST服务将文件作为流获取,并将相同的流传递给Amazon S3。在发送大量数据时,您可能应该使用流控制。您可以在发送数据之前检查通道是否可写(channe

我有一个Java REST服务,它运行在Netty上,用于上传(流式传输)5MB到500MB的大量文件。当我在某个时间点增加并发上载的数量时,应用程序的内存会耗尽,这是意料之中的,但我正在寻找在此场景中应该使用哪些Java GC和VM设置来提高性能和减少内存占用的建议。 如果有人能分享类似的经历,我将不胜感激


更新:要为问题添加更多上下文,REST服务将文件作为流获取,并将相同的流传递给Amazon S3。

在发送大量数据时,您可能应该使用流控制。您可以在发送数据之前检查通道是否可写(channel.isWritable()),并等待它准备就绪。您可以通过ChannelInboundHandler.channelWritabilityChanged(ChannelHandlerContext ctx)使用通知来跟踪此情况。如果没有流量控制,所有大文件都将消耗等待发送到Netty输出缓冲区的内存。

不清楚为什么会出现OOME。正确编码的应用程序不能做到这一点。关于您的实现,您没有给出任何代码或任何其他线索。增加最大堆不是一个选项吗?如果您想使用更多内存,似乎应该允许VM分配更多内存。谢谢您的评论Marko。如果您试图同时发送100个请求(流),并且每个请求都有一个100MB的文件,那么“正确编码”的预期行为是什么应用程序考虑到您在一台具有2GB RAM的服务器上进行测试这一事实吗?谢谢开发人员。我正在尝试找到GC和JVM配置,它们可以最大限度地利用我所描述的应用程序类型的分配资源。@Frank:我猜是“正确编码的”应用程序可以正常工作,因为没有理由将所有数据保留在内存中。IIUYC文件从磁盘复制到网络,因此每个文件只需要一些小的缓冲区。像8kB这样的缓冲区应该可以,越多越好,但即使每个文件有1MB的内存,也应该有很多内存。谢谢@Igor!我来看看你提到的课程。