虽然我可以在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工作,因为它很可能是一个权限问题。