2012-12-12 146 views
2

我使用http创建了使用HTML5 chunking文件API的文件传输网站。它工作正常,除了在上传文件时,服务器中的CPU使用率几乎是100%。这个文件传输将被用来上传平均大约4GB的文件。反正有没有使用临时目录上传文件?

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

反正有没有使用临时目录上传文件?

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

这里是 “顶” 命令上传文件(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采取所有资源.. 有没有人知道如果不是因为复制或上传文件到服务器而出现问题?

+5

我高度怀疑,复制文件时,CPU图像会超出几个百分点。你为什么不做更多的研究,准确地找出原因? – teh1

+0

听teh teh1 .... :-D说真的,虽然他是对的。这是不太可能的复制过程是什么让你的CPU高峰...... – Thihara

+0

@ teh1任何想法可能导致CPU秒杀,检查我的“顶部”命令结果在Linux服务器上。它显示httpd占用了所有的cpu资源28.3,28.3,... – Harts

回答

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); 
?> 

如果确定从TMP移动(请以你的价值CHUNK_SIZE)

+0

PUT和POST之间是否存在任何安全问题?可以用PUT方法上传多个文件吗? – Harts

+2

您可以使用put上传多个文件,但需要为每个要上传的文件发出请求。这意味着您无法在一个请求中上传多个文件。 – Licson

+0

我想你可以访问php://输入的时候,文件已经上传并存储在tmp文件中。 –

0

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

不要只在脚本中更改它,到脚本运行时,文件已经上传。

只需在php.ini中进行更改即可。

0

我认为你应该多分析一下你的应用程序,导致移动文件不会占用CPU大幅。

相关问题