【问题标题】:Multiple file upload with mojolicious fails on large number of files使用 mojolicious 上传多个文件在大量文件上失败
【发布时间】:2017-06-15 18:34:09
【问题描述】:

我碰壁了,这次我的谷歌技能让我失望了。我正在学习 mojolicious,以便为我经常使用的一系列 Perl 脚本创建一个有用的前端。我已经走了很长一段路,但是当文件总数达到 950 个时,我对(多个)文件上传感到困惑。

以前,我遇到了一个问题,即在多个文件上传时,文件将开始上传,但一旦文件大小达到 16 mb,上传就会停止。我通过设置 $ENV{MOJO_MAX_MESSAGE_SIZE} = 50000000000 解决了这个问题。但是,这个问题是不同的。为了说明,这是我尝试抓取上传文件的脚本的一部分:

my $files = $self->req->every_upload('localfiles');
for my $file ( @{$files} ) {
    my $fileName = $file->filename =~ s/[^\w\d\.]+/_/gr;
    $file->move_to("temporary_uploads/$fileName");
    $self->app->log->debug("$fileName uploaded\n");
    push @fileNames, $fileName;
};
say "FILES: ".scalar(@fileNames);

我很抱歉它可能很丑。如果我尝试上传 949 个文件,我的数组 @fileNames 会正确填充,但如果我尝试上传 950 个文件,我的数组最终会是空的,而且似乎 $files 也是空的。如果有人有任何想法或指示可以指导我找到解决方案,我将非常感激!

【问题讨论】:

  • 是否有另一台服务器可以包装您的 Mojolicious 应用程序?该服务器可能有一个请求大小上限,您可能会也可能无法更改。 Here's an example for nginx.
  • 您的服务器可以处理多少 4.99 GB 的上传?
  • @SinanÜnür 实际上...上传> 5gb的单个文件没问题...让我更加困惑!
  • 通过更新,我现在发现这不是文件大小问题,而是文件数量的问题——我可以上传 949 个 1 字节文件,但不能上传 950 个
  • 感谢@SinanÜnür 的指点——事实证明这实际上与 mojolicious 无关——我不得不增加每个进程的打开文件描述符的数量!我已经解决了这个问题-感谢您的指点!

标签: perl file-upload mojolicious mojolicious-lite


【解决方案1】:

如果我尝试上传 949 个文件,我的数组 @fileNames 被正确填充,但如果我尝试上传 950 个文件,我的数组最终为空,而且似乎 $files 也为空。

这意味着进程正在用完文件描述符。特别是,Linux 内核的默认值是1024

例如,最大文件描述符数 (ulimit -n) 的内核默认值为 1024/1024(软、硬),并且在 Linux 2.6.39 中已提升为 1024/4096

【讨论】:

    猜你喜欢
    • 2015-04-20
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    相关资源
    最近更新 更多