我正在运行 apache2.2.12 和 PHP 5.2.10。PHP 配置为通过 fcgid 作为单独进程运行。问题是,当用户上传文件时,apache 进程的大小几乎会膨胀相同的量。因此,如果有人尝试上传 200 MB 的文件,其中一个子进程会膨胀到当前大小 +200 MB。如果 2 个用户同时开始上传,我的服务器就会崩溃。
现在虚拟内存大小正在增加,但由于我使用的是基于 OpenVZ 的 VPS,所以这才是最重要的。
我的问题是:
- 这是正常的 Apache 行为吗?或者我可以做些什么来解决这个问题?
- 如果没有,是否有更节省内存的方式来处理大文件上传。按照目前的行为,每个接受上传的 Apache 子进程都需要 1 GB 的可用 RAM。
谢谢!
阿巴耶
-
答案1
有趣的问题,这似乎是 php 的一个限制。请参阅以下内容:
- http://aaronwinborn.com/blogs/aaron/how-handle-large-file-uploads
- http://www.radiks.com/upload/config.php
他们最后似乎都说“使用 java 或 Perl”或其他什么。也许 stackoverflow 上的某个人有答案。对于如此大的上传,sftp 可能是更好的解决方案,具体取决于它需要多么方便用户。
如果你愿意使用非 php,快传看起来是个不错的选择,因为它可以将文件分成块并将每个块刷新到磁盘。如果必须使用 php,看起来您可能能够根据以下方法使用套接字编程推出一些自定义功能这个 stackoverflow 帖子。
无论如何,对于这种规模,您可能还是想要一些具有恢复和进步能力的东西。