Иногда мое приложение возвращает клиенту ошибку HTTP 503. Единственная подсказка, которая у меня есть, это то, что когда это происходит, Cacti сообщает о пике запросов на размещение Varnish SMS.
После некоторого исследования я мог выделить Varnish слишком много оперативной памяти по сравнению с моей виртуальной машиной. Так я добавил 2Гб. С тех пор Varnish перезагружался, но не перезапускался.
Сейчас ошибка случается редко, но все же.
Вот график кактусов с пиком SMS: http://s29.postimg.org/94bu3vvd3/varnish_SMS.png
лак-3.0.4 на RHEL 6.3
Параметры запуска лака:
/ 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 лак -g лак -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
У меня виртуальная машина 10 ГБ и 6 выделены для Varnish.
Спасибо.
У вас действительно высокое количество SMA.s0.c_fail. Итак, Varnish пытается выделить память и терпит неудачу. Вы можете сделать Varnish более агрессивным, увеличив nuke_limit, то есть количество объектов, которые Varnish может убить при попытке освободить память.
Вам необходимо перезагрузить компьютер, чтобы изменения в настройках памяти вступили в силу. Тем не менее, я предлагаю выделить вашему серверу больше памяти. Увеличить объем памяти для Varnish обычно дешево и разумно.
Чтобы избежать сбоя запроса, Varnish выделит временную память для хранения объекта. Временное хранилище памяти не ограничено, что означает, что оно потенциально может вывести сервер из строя в случае чрезмерного использования. Вы можете ограничить его, если хотите.