Есть некоторые другие счетчики, которые будут более конкретно показывать, что происходит с сессиями.Поэтому следующим шагом в устранении неполадок является просмотр этих счетчиков:
varnishstat -1 | grep ^MAIN.sc_
Я немного уточню на типичном примере:
$ sudo varnishstat -1 | egrep "(sess_closed|sc_)"
MAIN.sess_closed 8918046 1.45 Session Closed
MAIN.sess_closed_err 96244948 15.69 Session Closed with error
MAIN.sc_rem_close 86307498 14.07 Session OK REM_CLOSE
MAIN.sc_req_close 8402217 1.37 Session OK REQ_CLOSE
MAIN.sc_req_http10 45930 0.01 Session Err REQ_HTTP10
MAIN.sc_rx_bad 0 0.00 Session Err RX_BAD
MAIN.sc_rx_body 0 0.00 Session Err RX_BODY
MAIN.sc_rx_junk 132 0.00 Session Err RX_JUNK
MAIN.sc_rx_overflow 2 0.00 Session Err RX_OVERFLOW
MAIN.sc_rx_timeout 96193210 15.68 Session Err RX_TIMEOUT
MAIN.sc_tx_pipe 0 0.00 Session OK TX_PIPE
MAIN.sc_tx_error 0 0.00 Session Err TX_ERROR
MAIN.sc_tx_eof 3 0.00 Session OK TX_EOF
MAIN.sc_resp_close 0 0.00 Session OK RESP_CLOSE
MAIN.sc_overload 0 0.00 Session Err OVERLOAD
MAIN.sc_pipe_overflow 0 0.00 Session Err PIPE_OVERFLOW
MAIN.sc_range_short 0 0.00 Session Err RANGE_SHORT
MAIN.sc_req_http20 0 0.00 Session Err REQ_HTTP20
MAIN.sc_vcl_failure 0 0.00 Session Err VCL_FAILURE
Вывод этой конкретной среды показываетчто большинство сеансов, которые закрываются с ошибкой, происходит из-за тайм-аута приема (MAIN.sc_rx_timeout
).Этот тайм-аут контролирует, как долго лак будет поддерживать открытые соединения, и устанавливается с помощью параметра timeout_idle
на varnishd
.Его значение составляет 5 секунд по умолчанию.Используйте varnishadm
, чтобы увидеть текущее значение и описание тайм-аута:
$ sudo varnishadm param.show timeout_idle
timeout_idle
Value is: 10.000 [seconds]
Default is: 5.000
Minimum is: 0.000
Idle timeout for client connections.
A connection is considered idle until we have received the full
request headers.
This parameter is particularly relevant for HTTP1 keepalive
connections which are closed unless the next request is
received before this timeout is reached.
Увеличение timeout_idle
, вероятно, уменьшит количество сеансов, которые закрыты из-за тайм-аута простоя.Это можно сделать, установив значение в качестве параметра при запуске лака.Пример:
varnishd [...] -p timeout_idle=15
Обратите внимание, что плюсы и минусы связаны с увеличением этого тайм-аута.