[英]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.