Squid Web Cache Wiki

Squid Web Cache 文档

🔗 寻找内存泄漏

内存管理是 Squid 中一个棘手的问题。它单进程的特性使得在任何情况下都不能泄漏内存变得非常重要,因为即使每请求泄漏一个字节,也可能导致代理在生产环境中运行几个小时后停滞不前。

🔗 Valgrind

Valgrind 是一个先进的运行时分析器,对于查找内存泄漏非常有用。不幸的是,如果您不是 Squid 的开发人员,您需要与开发人员合作才能正确解释 valgrind 的结果,因为 Squid 的内存使用经常会触发 valgrind 的误报泄漏。

Squid 可以“开箱即用”地在 valgrind 环境中执行,但为了减少误报的数量,最好使用 ./configure Squid --with-valgrind-debug./configure --disable-optimizations 在解释 valgrind 报告时很有帮助(但会减慢 Squid 的速度)。禁用内存池(memory_pools off)可以进一步减少误报的数量。另一种最小化误报的重要技术是使用 valgrind 抑制。附加的抑制 文件 在您需要使用时可能已过时(或与您的 Squid 版本不兼容),因此请根据需要进行调整。此类调整需要对 Squid 代码有深刻的理解。

以下是一种在 valgrind 控制下启动 Squid 的方法

valgrind -v \
    --trace-children=yes \
    --num-callers=50 \
    --log-file=valgrind-%p.log \
    --leak-check=full \
    --leak-resolution=high \
    --show-reachable=yes \
    --gen-suppressions=all \
    --suppressions=etc/valgrind.supp \
    sbin/squid ...

使用上述命令行选项,检测到的问题(包括泄漏)会在每个 valgrind 报告中详细说明(Squid 启动的每个进程都有一个报告)。

报告末尾有一个有用的摘要。例如

==11905== LEAK SUMMARY:
==11905==    definitely lost: 0 bytes in 0 blocks
==11905==    indirectly lost: 0 bytes in 0 blocks
==11905==      possibly lost: 36 bytes in 1 blocks
==11905==    still reachable: 1,905,982 bytes in 111 blocks
==11905==         suppressed: 1,026,644 bytes in 10,263 blocks

当 Squid 使用 ./configure --with-valgrind-debug 进行配置时,通过缓存管理器界面报告的内存使用信息(例如 squidclient mgr:mem)会包含 valgrind 报告。

导航:网站搜索网站页面分类🔼 向上