1

我们使用 Varnish-cache 6.0 向我们的客户提供 IPTV 服务,我一直有点担心我们的 Varnish-cache 服务器可能会出现问题。这个假设是基于当 IPTV 流流经我们的 Varnish 缓存而不是直接通过后端服务器时客户事件报告的数量。

这就是为什么我想消除 varnishstat 中的所有错误以缩小事件的可能原因,因为目前我没有更好的角度来解决问题。

让我们声明,我远非熟悉 Varnish 或专家。

因此,让我们深入研究“问题”:

varnishstat -1 output:

MAIN.sess_closed 38788 0.01 Session Closed

MAIN.sess_closed_err 15260404 3.47 Session Closed with error

基本上,几乎所有与 Varnish-cache 服务器的连接都因错误而关闭。我使用相同的 Varnish 配置为我们的网络设置了一个虚拟化演示服务器,当我在 VLC-mediaplayer 中更改频道时,仅生成了 sess_closed_err。请注意,我无法同时运行几个 VLC 到服务器,并且我们的客户使用机顶盒来使用该服务。

所以我的实际问题是,如何解决导致会话因错误而关闭的原因?

4

1 回答 1

2

还有一些其他计数器将更具体地显示会话发生的情况。因此,故障排除的下一步是查看这些计数器:

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可能会减少由于空闲超时而关闭的会话数。这可以通过在启动 varnish 时将值设置为参数来完成。例子:

varnishd [...] -p timeout_idle=15

请注意,增加此超时时间有利有弊。

于 2019-03-01T10:57:15.313 回答