我遇到的问题让我发疯,我无法理解为什么会这样。
我的系统是Ubuntu 14.04,带有16GB Ram。
我有一个包含以下代码的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,因为它无穷无尽。
我正在将文件(test.bin
)写入磁盘,而不是写入RAM-Disk或其他内容。
问题在于CACHED RAM is being increased all the time
,并且在1-2天之后它仅在CACHED中达到100%。
有人可以向我解释为什么会这样吗?为什么消耗这么多内存?
即使我清除缓冲区,1-2天之后也会发生同样的事情
谢谢 此致
答案 0 :(得分:0)
您可以通过跟踪$write_pointer
已打开的时间段以及在特定时间段后关闭/重新打开的时间段来绕过此问题。
答案 1 :(得分:0)
由于Linux内核将文件缓存到RAM中的性质。在健康的Linux系统中,空闲内存总是接近0,并且高速缓存靠近未使用的内存。 您可以使用以下命令定期清除缓存:
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
注意尽管有很多源,但是当进程回收它时会立即释放状态缓存内存,在某些情况下,当内存占用较多时,缓存内存可能会导致内存崩溃,而且它不是Linux错误,它更糟糕的设计。如果没有使用你的交换,那么你不必担心空闲内存。 不要将缓冲区与缓存混淆。在写作时使用缓冲区,缓存用于阅读。