【问题标题】:Guidance on about memory leak关于内存泄漏的指导
【发布时间】: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


【解决方案1】:

当我写完这个问题时,我发现它实际上基于磁盘缓存内存使用

~# 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 正在缓存但未使用,并且很可能会在需要时回收。跳跃它会帮助其他有这种困惑的人:)

干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多