【发布时间】:2014-11-06 03:03:46
【问题描述】:
我有以下情况,它看起来是造成的,我认为是内存泄漏,但如果是磁盘缓存,我还没有确认...
无论如何,我有一个几乎完整的 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 和物理内存的 cPanel 限制为 2GB。我目前正在使用 1GB 的内存,可能会增加...
如果这是磁盘缓存,我几乎可以肯定,linux 最终会清除缓存,或者如果进一步需要 ram,则会删除缓存。好吧,这是安全的情况。
我在问是否有办法检查我的脚本是否存在内存泄漏,以及继续使用 ram 的原因。我知道file_get_contents 在读取文件时正在使用mmap,这样很可能导致 RAM 被用于磁盘缓存。
我在大多数查询中使用findBy() 或findOneBy() 函数来查询数据库。我想我只有一个带有QueryBuilder 的自定义查询。
页面真的很快,我没有看到它加载的问题,但只关心它的使用情况。
我知道你们可能会要求提供代码,但我会但不知道要包含什么/哪个部分。我几乎提到了所有看起来有用的东西。
再次感谢,非常抱歉这个冗长的问题。
【问题讨论】:
-
您的脚本作为守护进程工作?
-
不不,使用 ajax 的实际网站。
-
所以,没有内存泄漏。每个脚本在运行后都会死掉,所有内存都会被清除。
-
我相信是这样的,当时我有 149.68M RAM 缓存内存活动和 957.56M RAM 缓存内存为该 cpanel 用户不活动,所以数字确实匹配。这只是缓存内存/最有可能用于磁盘缓存。
标签: php symfony caching memory-leaks doctrine