如何调试 memcached“服务器已失败并且已禁用,直到超时重试”错误?

Jev*_*vll 8 memcached

我有一个两台服务器的 memcached 设置。当 memcached 写入失败时,我会收到一封电子邮件通知。大约每天一次“服务器已失败并且在定时重试之前被禁用”错误来了,我不知道如何找到原因。

我正在使用 PHP Memcached 客户端。

我没有使用太长的键。我尝试添加 -v 标志,但没有帮助,日志保持为空。

如果我在错误通知中包含 getStats 的输出,我会收到以下信息:

Array
(
    [192.168.0.3:11211] => Array
        (
            [pid] => 28167
            [uptime] => 3671962
            [threads] => 4
            [time] => 1358714713
            [pointer_size] => 64
            [rusage_user_seconds] => 24516
            [rusage_user_microseconds] => 130981
            [rusage_system_seconds] => 86246
            [rusage_system_microseconds] => 675512
            [curr_items] => 1616352
            [total_items] => 118339822
            [limit_maxbytes] => 2684354560
            [curr_connections] => 8
            [total_connections] => 78108681
            [connection_structures] => 356
            [bytes] => 981522779
            [cmd_get] => 1561752945
            [cmd_set] => 158718324
            [get_hits] => 1383072575
            [get_misses] => 178680370
            [evictions] => 0
            [bytes_read] => 138113231690
            [bytes_written] => 1091741700765
            [version] => 1.4.15
        )

    [192.168.0.4:11211] => Array
        (
            [pid] => -1
            [uptime] => 0
            [threads] => 0
            [time] => 0
            [pointer_size] => 0
            [rusage_user_seconds] => 0
            [rusage_user_microseconds] => 0
            [rusage_system_seconds] => 0
            [rusage_system_microseconds] => 0
            [curr_items] => 0
            [total_items] => 0
            [limit_maxbytes] => 0
            [curr_connections] => 0
            [total_connections] => 0
            [connection_structures] => 0
            [bytes] => 0
            [cmd_get] => 0
            [cmd_set] => 0
            [get_hits] => 0
            [get_misses] => 0
            [evictions] => 0
            [bytes_read] => 0
            [bytes_written] => 0
            [version] => 
        )

)
Run Code Online (Sandbox Code Playgroud)

emc*_*lle 3

MEMCACHED_SERVER_TEMPORARILY_DISABLED或“服务器已失败并被禁用,直到定时重试”由库生成libmemcached。我无法确认如何pecl_memcached处理此错误,但我想它将被视为标准连接错误。当连接超过超时和/或重试限制时,将发出此消息。(看 I/O 选项

当然,由于这是一个临时问题,您将构建 PHP 应用程序以切换到下一个缓存服务器,或者将受影响的服务器从服务器列表中拉出。

  • 那么您是说没有办法消除这些错误吗?为什么它们会出现呢?应该是有原因的。 (5认同)