我有以下情况,它看起来是造成,我认为,内存泄漏,但没有确认这是否是磁盘缓存而不是......
无论如何,我有一个几乎完整的ajax网站从另一台服务器中提取数据。因此,需要以某种方式缓存数据。我想,一旦页面被渲染,我可以直接保存html代码,并在第二个请求中,如果缓存文件存在并匹配请求,则为用户提供特定的缓存文件。
缓存文件大小约为30Kb到100Kb(仅限html代码),但是我有近1M页面,因此有很多缓存文件。目前的总大小超过2.1GB磁盘空间。
我使用file_get_contents
获取缓存文件的内容并将其呈现给用户。
顺便说一下,我也使用symfony2框架,以防信息有用,也有学说。
此时,我已经使用了
$em->getConnection()->getConfiguration()->setSQLLogger(null);
$em->clear();
以避免学说的内存泄漏以防万一。开发中的Symfony2仅表示它使用大约20MB到40MB的RAM,具体取决于页面和查询。在提供缓存文件时,大约有20MB的RAM。
使用具有Cloudlinux和物理RAM的cPanel限制为2GB。我目前正在使用1GB的内存,可能会增加...
如果这是磁盘缓存,我几乎可以肯定,linux最终会清除缓存,或者如果进一步需要ram,它将丢弃缓存。那是安全的案例。
我问是否有办法检查我的脚本是否有内存泄漏,继续使用ram。我知道file_get_contents
在读取文件时正在使用mmap
,因此最有可能导致RAM用于磁盘缓存。
我在大多数查询中使用findBy()
或findOneBy()
函数来查询数据库。我想我只有QueryBuilder
的一个自定义查询。
页面非常快,我没有看到加载的问题,但只关心它的用法。
我知道你们可能会要求提供代码,我会但却不知道要包含什么/哪个部分。我已经提到了几乎所有有用的东西。
再次感谢,对这个长期问题非常抱歉。
答案 0 :(得分:0)
当我写完这个问题的时候,我发现其实际的磁盘缓存ram使用情况基于
~# cat meminfo
MemTotal: 2097152 kB
MemFree: 989916 kB
Cached: 1107236 kB
Buffers: 0 kB
Active: 149680 kB
Inactive: 957556 kB
Active(anon): 0 kB
Inactive(anon): 0 kB
Active(file): 149680 kB
Inactive(file): 957556 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 24575976 kB
SwapFree: 24575976 kB
Dirty: 492 kB
Writeback: 0 kB
AnonPages: 0 kB
Shmem: 0 kB
Slab: 0 kB
SReclaimable: 0 kB
SUnreclaim: 0 kB
MemCommitted: 2097152 kB
MemAvailable: 32891128 kB
MemPortion: 509936 kB
Shadow: 13476 kB
Shadow(anon): 0 kB
Shadow(file): 13476 kB
IdleClean: 0 kB
IdleDirtyFile: 0 kB
IdleDirtySwap: 0 kB
以及此处的信息:https://www.centos.org/docs/5/html/5.1/Deployment_Guide/s2-proc-meminfo.html
主要是:
Inactive — The total amount of buffer or page cache memory, in kilobytes, that are free and available. This is memory that has not been recently used and can be reclaimed for other purposes.
使用时:
Inactive: 957556 kB
安全地假设957.56MB正在被缓存但未被使用,并且很可能在需要时将其回收。跳跃它将帮助其他有这种困惑的人:)
干杯。