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: 到期时间。