16.2.2.9 内存缓存日志

如果使用 、 或 选项启用详细模式,-v-vvmemcached-vvv输出的信息包括正在执行的操作的详细信息。

如果没有详细选项,memcached 在正常操作期间通常不会产生任何输出。

  • 使用时的输出 -v

    最低的详细级别向您显示:

    • 错误和警告

    • 瞬态错误

    • 协议和套接字错误,包括耗尽可用连接

    • 每个注册的客户端连接,包括套接字描述符号和使用的协议。

      例如:

      32: Client using the ascii protocol
      33: Client using the ascii protocol

      套接字描述符仅在客户端保持连接时有效。可能无法有效表示非持久连接。

    此级别的错误消息输出示例包括:

    <%d send buffer was %d, now %d
    Can't listen for events on fd %d
    Can't read from libevent pipe
    Catastrophic: event fd doesn't match conn fd!
    Couldn't build response
    Couldn't realloc input buffer
    Couldn't update event
    Failed to build UDP headers
    Failed to read, and not due to blocking
    Too many open connections
    Unexpected state %d
  • 使用时的输出 -vv

    使用第二级详细信息时,您将获得有关协议操作、密钥更新、块和网络操作和详细信息的更多详细信息。

    在使用这种详细程度的memcached 初始启动期间 ,您将看到各个平板类的大小、块大小和每个平板的条目数。这些不显示 slab 的分配,仅显示添加数据时将创建的 slab。您还会获得有关用于发送信息的侦听队列和缓冲区的信息。下面给出了使用默认内存和增长因子为基于 TCP/IP 的系统生成的输出示例:

    $> memcached -vv
    slab class   1: chunk size     80 perslab 13107
    slab class   2: chunk size    104 perslab 10082
    slab class   3: chunk size    136 perslab  7710
    slab class   4: chunk size    176 perslab  5957
    slab class   5: chunk size    224 perslab  4681
    slab class   6: chunk size    280 perslab  3744
    slab class   7: chunk size    352 perslab  2978
    slab class   8: chunk size    440 perslab  2383
    slab class   9: chunk size    552 perslab  1899
    slab class  10: chunk size    696 perslab  1506
    slab class  11: chunk size    872 perslab  1202
    slab class  12: chunk size   1096 perslab   956
    slab class  13: chunk size   1376 perslab   762
    slab class  14: chunk size   1720 perslab   609
    slab class  15: chunk size   2152 perslab   487
    slab class  16: chunk size   2696 perslab   388
    slab class  17: chunk size   3376 perslab   310
    slab class  18: chunk size   4224 perslab   248
    slab class  19: chunk size   5280 perslab   198
    slab class  20: chunk size   6600 perslab   158
    slab class  21: chunk size   8256 perslab   127
    slab class  22: chunk size  10320 perslab   101
    slab class  23: chunk size  12904 perslab    81
    slab class  24: chunk size  16136 perslab    64
    slab class  25: chunk size  20176 perslab    51
    slab class  26: chunk size  25224 perslab    41
    slab class  27: chunk size  31536 perslab    33
    slab class  28: chunk size  39424 perslab    26
    slab class  29: chunk size  49280 perslab    21
    slab class  30: chunk size  61600 perslab    17
    slab class  31: chunk size  77000 perslab    13
    slab class  32: chunk size  96256 perslab    10
    slab class  33: chunk size 120320 perslab     8
    slab class  34: chunk size 150400 perslab     6
    slab class  35: chunk size 188000 perslab     5
    slab class  36: chunk size 235000 perslab     4
    slab class  37: chunk size 293752 perslab     3
    slab class  38: chunk size 367192 perslab     2
    slab class  39: chunk size 458992 perslab     2
    <26 server listening (auto-negotiate)
    <29 server listening (auto-negotiate)
    <30 send buffer was 57344, now 2097152
    <31 send buffer was 57344, now 2097152
    <30 server listening (udp)
    <30 server listening (udp)
    <31 server listening (udp)
    <30 server listening (udp)
    <30 server listening (udp)
    <31 server listening (udp)
    <31 server listening (udp)
    <31 server listening (udp)

    使用这个详细级别可以是一种有用的方法来检查增长因子对具有不同内存分配的 slab 的影响,这反过来可以用来更好地调整增长因子以适应您存储在缓存中的数据。例如,如果将增长因子设置为 4(将每个板的大小增加四倍):

    $> memcached -f 4 -m 1g -vv
    slab class   1: chunk size     80 perslab 13107
    slab class   2: chunk size    320 perslab  3276
    slab class   3: chunk size   1280 perslab   819
    slab class   4: chunk size   5120 perslab   204
    slab class   5: chunk size  20480 perslab    51
    slab class   6: chunk size  81920 perslab    12
    slab class   7: chunk size 327680 perslab     3
    ...

    在缓存使用过程中,这个详细级别还会打印出密钥存储和恢复的详细信息等信息。下面显示了典型设置/获取和递增/递减操作期间的输出示例。

    32: Client using the ascii protocol
    <32 set my_key 0 0 10
    >32 STORED
    <32 set object_key 1 0 36
    >32 STORED
    <32 get my_key
    >32 sending key my_key
    >32 END
    <32 get object_key
    >32 sending key object_key
    >32 END
    <32 set key 0 0 6
    >32 STORED
    <32 incr key 1
    >32 789544
    <32 decr key 1
    >32 789543
    <32 incr key 2
    >32 789545
    <32 set my_key 0 0 10
    >32 STORED
    <32 set object_key 1 0 36
    >32 STORED
    <32 get my_key
    >32 sending key my_key
    >32 END
    <32 get object_key
    >32 sending key object_key1 1 36
    
    >32 END
    <32 set key 0 0 6
    >32 STORED
    <32 incr key 1
    >32 789544
    <32 decr key 1
    >32 789543
    <32 incr key 2
    >32 789545

    在客户端通信期间,对于每一行,首字符表示信息流的方向。< 用于从客户端到 memcached服务器的通信和 > 用于返回到客户端的通信。该数字是连接的数字套接字描述符。

  • 使用时的输出 -vvv

    这种冗长程度包括在向客户端读取内容或从客户端写入内容时事件库中不同状态之间的连接转换。它应用于诊断和识别客户沟通中的问题。例如,您可以使用此信息来确定memcached是否需要很长时间才能将信息返回给客户端,是在客户端操作的读取期间,还是在返回并完成操作之前。下面提供了一组操作的典型序列示例:

    <32 new auto-negotiating client connection
    32: going from conn_new_cmd to conn_waiting
    32: going from conn_waiting to conn_read
    32: going from conn_read to conn_parse_cmd
    32: Client using the ascii protocol
    <32 set my_key 0 0 10
    32: going from conn_parse_cmd to conn_nread
    > NOT FOUND my_key
    >32 STORED
    32: going from conn_nread to conn_write
    32: going from conn_write to conn_new_cmd
    32: going from conn_new_cmd to conn_waiting
    32: going from conn_waiting to conn_read
    32: going from conn_read to conn_closing
    <32 connection closed.

memcached中 的所有详细级别都设计为在调试或检查问题期间使用。生成的信息量 -vvv非常大,尤其是在使用 时,尤其是在繁忙的服务器上。另请注意,将错误信息写出,尤其是写到磁盘,可能会抵消您通过使用memcached获得的一些性能提升。因此,不建议在生产或部署环境中使用。