如何设置memcached使用unix套接字?

虽然我可以在Debian上使用memcached来使用默认的11211端口,但是我很难设置Unix套接字

从我读过的,我知道我需要创build一个memcache.socket并添加:

 -s /path/to/memcache.socket -a 0766 

/etc/memcached.conf并注释掉默认的连接端口和IP,即

 -p 11211 -l 127.0.0.1 

但是,当我重新启动memcached我得到Drupal网站上的内部服务器错误。

我试图实现unix套接字,以避免TCP / IP开销,并提高整体memcached的性能,但不知道有多less性能增益可以期望这种调整。

我感谢您的提示或可能的configuration来解决这个问题。

我相信套接字将需要世界可执行文件,不可写。 如果看到包含errno = 32 Broken pipe的PHP通知消息,请将Memcached访问掩码调整为0755

 -s /path/to/memcache.socket -a 0755 

同时validationDrupal的Memcached守护程序在configuration中的TCP端口是0 。 一个未设置的端口将默认为11211 ,并将套接字连接混淆。

 $conf += array( 'memcache_servers' => array( 'unix:///path/to/memcache.socket:0' => 'default', ) ); 

您可能会发现只是设置套接字path不起作用。 在创build套接字之前,Memcached会丢弃权限,但在写入其PID之后。 通常将套接字放在/var/run (例如像mysql一样),但是只有root可以在那里写入,所以创build/var/run/memcached并把它分配给nobody,然后设置/var/run/memcached/memcached.sock作为sockets的path。 把它/tmp也是可以的,但是它的本质可能会被破坏。 坚持在/var/run是更持久一点。

您可以使用netcat连接到它来检查它的工作:

nc -U /var/run/memcached/memcached.sock

只需在空白提示符下键入stats ; 如果它正在工作,你会得到一个负载的输出。

添加到/ etc / default / memcached:

 [ ENABLE_MEMCACHED = yes ] && install -d -o memcache -g www-data -m 0770 /var/run/memcached # or use setfacl and whatever user/group you want true # because set -e in init-scripts 

添加到/etc/memcached.conf中:

 -s /var/run/memcached/memcached.sock -a 0666 

我testing了使用memcached unix套接字的性能提升,在我使用php cli的testing中使用unix套接字的速度提高了33%。

我发现将memcache用户添加到www-data组并赋予unix套接字775权限非常重要,这样php handler和memcache用户都可以执行它。

你可以在这里find基准和写作 – 虽然它是用于WordPress,它应该为Drupal工作,因为它很可能是一个权限问题。