由于我无法在网络中找到任何可靠的程序,一旦板块中的密钥数量超过500k就会检索所有的memcache密钥,我想用PHP编写自己的程序.
然后我意识到有一个原因,为什么所有的程序都没有真正适用于这么多的密钥.
当我用stats cachedump <slab-id> <limit>它读取键时,只返回一定数量的键 - 在我的情况下 - 结束约30k.
我怎样才能得到至少这500k可能在一块板上?
建议使用的所有"帖子"和"答案" memdump都不起作用.他们也有这个限制.
我在用 memcached 1.4.25
调试源代码后,memcached我意识到限制是由这一行引起的items.c:item_cachedump()
unsigned int memlimit = 2 * 1024 * 1024; /* 2MB max response size */
Run Code Online (Sandbox Code Playgroud)
由于此分配,分配的缓冲区限制了返回键的数量,因为所有键的总长度(包括\r\n每个键名称之后)不得超过此大小。
我可以通过将其更改为以下方式来解决我的案例问题:
unsigned int memlimit = 128 * 1024 * 1024;
Run Code Online (Sandbox Code Playgroud)
并重新编译memcached. 现在我可以读取大约 700k 个按键 [我没有更多的按键来最大化该功能]。
我发现非常高的值会使系统不稳定。当值为500 * 1024 * 1024[eq 500MB] 时,我的系统几乎因以下消息而崩溃:
shell-init:检索当前目录时出错:getcwd:无法访问父目录:没有这样的文件或目录
即使我的服务器有 5GB RAM,我也不太明白为什么,但最终 128MB 的值是一个可用值。
我要求memcached 开发团队添加一个可以在命令行中设置值的开关。
| 归档时间: |
|
| 查看次数: |
1449 次 |
| 最近记录: |