2012-12-12 91 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大幅。

相關問題