2

我使用 http 使用 HTML5 分块文件 api 创建了文件传输网站。它工作正常,除了在上传文件期间,服务器的 CPU 使用率几乎是 100%。此文件传输将用于平均上传文件 4GB 左右。

我的猜测是它几乎占用了 100% 的 cpu 使用率,因为它试图将文件从 tmp 目录移动到目标目录。

有没有在不使用临时目录的情况下上传文件?

我的问题是针对 PHP 但其他语言将被接受

这是上传文件期间“top”命令的结果(18mb、38mb、60mb、33mb)

 1904 apache    20   0 33504 5740 1952 R 28.3  0.2   0:02.19 httpd
 1905 apache    20   0 33504 5740 1952 R 28.3  0.2   0:01.99 httpd
 1903 apache    20   0 33232 6968 3060 R 28.0  0.2   0:01.98 httpd
 1910 apache    20   0 33240 6020 2248 S 11.5  0.2   0:02.85 httpd
 2133 root      20   0  2656 1124  896 R  1.6  0.0   0:00.71 top
    1 root      20   0  2864 1404 1188 S  0.0  0.0   0:03.99 init

它表明 httpd 占用了所有资源。如果不是因为将文件复制或上传到服务器,有谁知道问题出在哪里?

4

4 回答 4

0

如果您确定从 tmp 移动到目标是问题,您可以更改 php.ini 设置 (upload_tmp_dir) 以将 tmp 目录移动到与目标目录相同的目录中的另一个目录。

不要只是在您的脚本中更改它,当您的脚本运行时,该文件已经上传。

只需在 php.ini 中更改它。

于 2012-12-12T03:45:42.930 回答
0

我认为您应该对您的应用程序进行更多分析,因为移动文件不会显着占用 CPU。

于 2012-12-12T03:45:50.613 回答
0

对于 4GB 这么大的文件,您可能会考虑设置一个 websocket 来为您的应用程序流式传输。

http://net.tutsplus.com/tutorials/javascript-ajax/how-to-create-a-resumable-video-uploade-in-node-js/

于 2012-12-12T04:42:11.223 回答
0

您可以使用 http put 方法来处理文件上传。在这种方法中,数据直接流式传输到 PHP 脚本,您可以使用文件函数处理它:

<?php
$f = fopen('php://input','r');
while(!feof($f)){
    $chunk = fread($f,CHUNK_SIZE);
    [Handle the uploading file here]
}
fclose($f);
?>

(将 CHUNK_SIZE 替换为您的值)

于 2012-12-12T02:42:29.433 回答