簡體   English   中英

PHP編寫一個大文件-緩存的RAM

[英]PHP Write a Big File - cached RAM

我遇到一個使我發瘋的問題,我不明白為什么會這樣。

我的系統是具有16GB Ram的Ubuntu 14.04。

我有一個帶有以下代碼的PHP腳本

<?php
$fp = fopen( "http://...", 'r' );

$write_pointer = fopen( 'test.bin', 'a' );
while ( !feof( $fp ) )
{
    fwrite( $write_pointer, stream_get_line( $fp, 4096 ) );
    fflush( $write_pointer );
}
fclose( $write_pointer );
fclose( $fp );
?>

它從HTTP讀取(無休止)並寫入文件。 該文件可以是一個很大的文件,最多40 GB,因為它無休止。

我正在磁盤中而不是RAM磁盤或其他內容中寫入文件( test.bin )。

問題是CACHED RAM is being increased all the time ,而1-2天后僅在CACHED中變為100%。

有人可以向我解釋為什么會這樣嗎? 為什么要消耗這么多RAM?

即使清除緩沖區,1-2天后也會發生相同的情況

謝謝你的問候

您可以跟蹤$write_pointer打開時間並在特定時間段后關閉/重新打開,從而繞過該問題。

由於Linux內核的性質,該內核將文件緩存到RAM。 在健康的Linux系統中,可用內存始終接近0,而緩存則接近未使用的內存。 您可以使用以下命令定期清除緩存:

sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

請注意,盡管有許多資源表明狀態高速緩存的內存在進程回收時會立即釋放,但在某些情況下,當內存使用過多時,高速緩存的內存可能會導致內存不足崩潰,並且這不是Linux錯誤,這更是一個糟糕的設計。 如果未使用交換,則不必擔心可用內存。 不要將緩沖區與緩存混淆。 寫入時使用緩沖區,讀取時使用緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM