看了社区issue不打算支持,只好自己写了

另外 @suxb201 指出写脚本多进程memtier分别压也能满足需求,确实,我脑抽了没这么想

如果写脚本不满足,再采用本文描述的方法吧

代码在这里

或者用这个包,编译方式不变

使用方式 -H host1:port1,host2:port2 逗号分隔不同ip_port 冒号分隔ip和port

 ./memtier_benchmark -H 127.0.0.1:6371,127.0.0.1:6372,127.0.0.1:6373 -c 30 -n 1000000

注意 -c 客户端数要比服务列表多一些

如果你也要改,我告诉你改哪里

首先配置项,改config_parse_args

代码运行结构是cg_thread - client_group - client - shared_connection

咱们这里改的是client,具体来说是client::connect

本来是要连一个ip,这里咱们就轮训指定的ip列表,所以指定的client要多一些,起码大于服务列表数

这里是轮训创建的,其实也可以设计一些特殊的访问模式,轮训比较简单,定义个static count循环就行了

            static int count = 0;
            auto idx = count % m_config->server_list_num;
            auto c = m_config->server_list_addr[idx];
            if (c == nullptr || c->get_connect_info(&addr) != 0) {
                benchmark_error_log("connect: resolve error\n");
                return -1;
            }

            // Just in case we got domain name and not ip, we convert it
            char address[INET6_ADDRSTRLEN];
            if (addr.ci_family == PF_INET) {
                struct sockaddr_in *ipv4 = (struct sockaddr_in *)addr.ci_addr;
                inet_ntop(AF_INET, &(ipv4->sin_addr), address, INET_ADDRSTRLEN);
            } else {
                struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)addr.ci_addr;
                inet_ntop(AF_INET6, &(ipv6->sin6_addr), address, INET6_ADDRSTRLEN);
            }

            // save address and port
            sc->set_address_port(address, c->m_port_str.c_str());            
            count++;

这里我遇到个bug,在mac平台无法解决

调用get_connect_info会走到getaddrinfo和freeaddrinfo 成对的,freeaddrinfo挂

考虑到connect不频繁,注释了,差不多得了

所有改动在这里

还是比较简单的。不过调试崩溃调了好久没解决,注释了

     if (!m_used_addr) {
         if (m_server_addr) {
-            freeaddrinfo(m_server_addr);
-            m_server_addr = NULL;
+            // mac has bug, always coredump here
+            // fuck it, just leak
+            //freeaddrinfo(m_server_addr);
+            //m_server_addr = NULL;
        }


## PS
mac不能用gdb lldb第一次调试环境很麻烦, 不配置不生成文件

```bash
ulimit -c unlimited
sudo chmod -R g+w /cores
sudo chgrp -R admin /cores
#可以了
lldb --core /cores/core.73219 memtier_benchmark