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