16.2.2.6 使用memcached和 DTrace

memcached包括许多不同的 DTrace 探测器,可用于监视服务器的运行。添加、更新或删除键值对时,包含的探测器可以监视单个连接、slab 分配和对哈希表的修改。

有关 DTrace 和编写 DTrace 脚本的更多信息,请阅读 DTrace 用户指南

对 DTrace 探测的支持已添加到 memcached 1.2.6 中,其中包括许多可用于帮助监视应用程序的 DTrace 探测。Solaris 10、OpenSolaris、OS X 10.5 和 FreeBSD 支持 DTrace。要在memcached中启用 DTrace 探测器,请从源代码构建并使用该--enable-dtrace 选项。有关详细信息,请参阅 第 16.2.1 节,“安装memcached

memcached 支持的探测有:

  • conn-allocate(connid)

    从连接池分配连接对象时触发。

    • connid:连接ID。

  • conn-release(connid)

    当连接对象被释放回连接池时触发。

    参数:

    • connid:连接ID。

  • conn-create(ptr)

    当正在创建新的连接对象时触发(即,连接池中没有空闲连接对象)。

    参数:

    • ptr: 指向连接的指针。目的

  • conn-destroy(ptr)

    当连接对象被销毁时触发。

    参数:

    • ptr: 指向连接对象的指针。

  • conn-dispatch(connid, threadid)

    当连接从主线程或连接管理线程分派到工作线程时触发。

    参数:

    • connid:连接ID。

    • threadid:线程ID。

  • slabs-allocate(size, slabclass, slabsize, ptr)

    从 slab 分配器分配内存。

    参数:

    • size: 请求的大小。

    • slabclass: 分配在这个类中完成。

    • slabsize: 此类中每个项目的大小。

    • ptr: 指向已分配内存的指针。

  • slabs-allocate-failed(size, slabclass)

    无法分配内存(内存不足)。

    参数:

    • size: 请求的大小。

    • slabclass: 未能满足请求的类。

  • slabs-slabclass-allocate(slabclass)

    当 slab 类需要更多空间时触发。

    参数:

    • slabclass: 需要更多内存的类。

  • slabs-slabclass-allocate-failed(slabclass)

    无法分配内存(内存不足)。

    参数:

    • slabclass: 抢内存失败的类。

  • slabs-free(size, slabclass, ptr)

    释放记忆。

    参数:

    • size:要释放的内存量,以字节为单位。

    • slabclass: 内存所属的类。

    • ptr: 指向要释放的内存的指针。

  • assoc-find(key, depth)

    当我们在哈希表中搜索命名键时触发。这两个元素提供了对哈希函数运行情况的深入了解。遍历是一个不太理想的函数的标志,浪费了 CPU 容量。

    参数:

    • key: 搜索的密钥。

    • depth: 哈希表列表的深度。

  • assoc-insert(key, nokeys)

    插入新项目时触发。

    参数:

    • key: 刚刚插入的钥匙。

    • nokeys:当前存储的密钥总数,包括为其调用插入的密钥。

  • assoc-delete(key, nokeys)

    删除新项目时触发。

    参数:

    • key: 刚刚删除的密钥。

    • nokeys:当前存储的键总数,不包括为其调用删除的键。

  • item-link(key, size)

    在缓存中链接项目时触发。

    参数:

    • key:项目键。

    • size:数据的大小。

  • item-unlink(key, size)

    删除项目时触发。

    参数:

    • key:项目键。

    • size:数据的大小。

  • item-remove(key, size)

    当项目的 refcount 减少时触发。

    参数:

    • key: 物品的钥匙。

    • size:数据的大小。

  • item-update(key, size)

    当更新“最后引用”时间时触发。

    参数:

    • key: 物品的钥匙。

    • size:数据的大小。

  • item-replace(oldkey, oldsize, newkey, newsize)

    当一个项目被另一个项目替换时触发。

    参数:

    • oldkey:要替换的项目的键。

    • oldsize:旧项目的大小。

    • newkey:新项目的关键。

    • newsize:新项目的大小。

  • process-command-start(connid, request, size)

    命令处理开始时触发。

    参数:

    • connid:连接ID。

    • request: 传入请求。

    • size:请求的大小。

  • process-command-end(connid, response, size)

    当命令处理完成时触发。

    参数:

    • connid:连接ID。

    • response: 发送回客户端的响应。

    • size:响应的大小。

  • command-get(connid, key, size)

    get因命令而 被解雇。

    参数:

    • connid:连接ID。

    • key: 请求的密钥。

    • size:密钥数据的大小(如果未找到,则为 -1)。

  • command-gets(connid, key, size, casid)

    gets因命令而 被解雇。

    参数:

    • connid:连接ID。

    • key: 请求的密钥。

    • size:密钥数据的大小(如果未找到,则为 -1)。

    • casid: 项目的 casid。

  • command-add(connid, key, size)

    add因命令而 被解雇。

    参数:

    • connid:连接ID。

    • key: 请求的密钥。

    • size:密钥数据的新大小(如果未找到,则为 -1)。

  • command-set(connid, key, size)

    set因命令而 被解雇。

    参数:

    • connid:连接ID。

    • key: 请求的密钥。

    • size:密钥数据的新大小(如果未找到,则为 -1)。

  • command-replace(connid, key, size)

    replace因命令而 被解雇。

    参数:

    • connid:连接ID。

    • key: 请求的密钥。

    • size:密钥数据的新大小(如果未找到,则为 -1)。

  • command-prepend(connid, key, size)

    prepend因命令而 被解雇。

    参数:

    • connid:连接ID。

    • key: 请求的密钥。

    • size:密钥数据的新大小(如果未找到,则为 -1)。

  • command-append(connid, key, size)

    append因命令而 被解雇。

    参数:

    • connid:连接ID。

    • key: 请求的密钥。

    • size:密钥数据的新大小(如果未找到,则为 -1)。

  • command-cas(connid, key, size, casid)

    cas因命令而 被解雇。

    参数:

    • connid:连接ID。

    • key: 请求的密钥。

    • size:密钥数据的大小(如果未找到,则为 -1)。

    • casid: 请求的 cas ID。

  • command-incr(connid, key, val)

    incr因命令 被解雇。

    参数:

    • connid:连接ID。

    • key: 请求的密钥。

    • val: 新值。

  • command-decr(connid, key, val)

    decr因命令 被解雇。

    参数:

    • connid:连接ID。

    • key: 请求的密钥。

    • val: 新值。

  • command-delete(connid, key, exptime)

    delete因命令而 被解雇。

    参数:

    • connid:连接ID。

    • key: 请求的密钥。

    • exptime: 到期时间。