Varnish SMS 配置请求生成 HTTP 503

Varnish SMS 配置请求生成 HTTP 503

有时我的应用程序会向客户端返回 HTTP 503 错误。我唯一的线索是,当这种情况发生时,Cacti 会报告 Varnish SMS 分配请求的峰值。

经过一番研究,我可能为 Varnish 分配了太多 RAM,与我的 VM 相比。所以我添加了 2GB。Varnish 从那时起就重新加载了,但没有重新启动。

现在,错误很少发生,但仍然存在。

  • 应用程序日志中 0 个错误
  • 0 Apache 日志中的错误

这里是带有 SMS 峰值的仙人掌图: http://s29.postimg.org/94bu3vvd3/varnish_SMS.png

RHEL 6.3 上的 varnish-3.0.4

Varnish启动参数:

/usr/sbin/varnishd -P /var/run/varnish.pid -a :80 -f /etc/varnish/rc_platform.vcl -T xxx.xxx.xx.xxx:6082 -t 120 -w 1,1000,120 -u varnish -g varnish -S /etc/varnish/secret -s malloc,6G

varnishstat 中有趣的部分

SMA.s0.c_req            14736881         2.26 Allocator requests
SMA.s0.c_fail            4190399         0.64 Allocator failures
SMA.s0.c_bytes      353887517876     54362.00 Bytes allocated
SMA.s0.c_freed      347445180586     53372.37 Bytes freed
SMA.s0.g_alloc            311300          .   Allocations outstanding
SMA.s0.g_bytes        6442337290          .   Bytes outstanding
SMA.s0.g_space            113654          .   Bytes available
SMA.Transient.c_req     15771681         2.42 Allocator requests
SMA.Transient.c_fail           0         0.00 Allocator failures
SMA.Transient.c_bytes 910056978442    139797.31 Bytes allocated
SMA.Transient.c_freed 910056853513    139797.29 Bytes freed
SMA.Transient.g_alloc           52          .   Allocations outstanding
SMA.Transient.g_bytes       124929          .   Bytes outstanding
SMA.Transient.g_space            0          .   Bytes available

我有一个 10GB 的虚拟机,其中 6GB 分配给了 Varnish。

谢谢。

答案1

您的 SMA.s0.c_fail 计数非常高。因此,Varnish 尝试分配内存并失败。您可以通过提高 nuke_limit(即 Varnish 在尝试释放内存时可以终止的对象数)来让 Varnish 更加积极。

您需要重新启动以使内存设置的更改生效。不过,我建议为服务器提供更多内存。为 Varnish 提供更多内存通常既便宜又明智。

为了避免请求失败,Varnish 将分配临时内存来存储对象。临时内存存储不受限制,这意味着如果过度使用,可能会导致服务器瘫痪。您可以根据需要限制它。

相关内容