我使用http使用HTML5分块文件api创建了文件传输网站。它工作正常,除了在上传文件期间,服务器中的CPU使用率几乎是100%。此文件传输将用于平均上传文件大约4GB。
我的猜测是,它占用CPU几乎100%,因为它试图将文件从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占用了所有资源.. 有没有人知道问题是什么,如果不是因为复制或上传文件到服务器?
答案 0 :(得分: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替换为您的值)
答案 1 :(得分:0)
如果您确定从tmp移动到目的地是问题,您可以更改php.ini设置(upload_tmp_dir)以将tmp目录移动到与目标目录相同的目录中的另一个目录。
不要在脚本中更改它,在脚本运行时,文件已经上传。
只需在php.ini中更改它。
答案 2 :(得分:0)
我认为你应该更多地分析你的应用程序,因为移动文件不会占用CPU。
答案 3 :(得分:0)
对于4GB以上的文件,您可以考虑设置一个websocket来流式传输到您的应用程序。