How to set up memcached to use unix socket?
While I could use memcached on Debian to use the default 11211 port, but I've had great difficulty setting up Unix socket.
From what I've read, I know that I need to create a memcache.socket
and add:
-s /path/to/memcache.socket
-a 0766
To /etc/memcached.conf
and comment out the default connection port and IP, i.e.
-p 11211
-l 127.0.0.1
However, when I restart memcached I get internal server errors on Drupal site.
I'm trying to implement unix sockets to avoid TCP/IP overhead and boost overall memcached performance, however not sure how much performance gain one can expect of this tweak.
I appreciate your hints or possibly configs to to resolve this.
Solution 1:
You may find that just setting the socket path doesn't work. Memcached drops privileges before it creates its socket, though after it's written its PID. It's common to put the socket in /var/run
(e.g. as mysql does), but only root can write there, so create /var/run/memcached
and chown it to nobody, then set /var/run/memcached/memcached.sock
as the socket path. Writing it to /tmp
would work too, but by its very nature that could get trashed; sticking it in /var/run
is a bit more permanent.
You can check it's working by using netcat to connect to it:
nc -U /var/run/memcached/memcached.sock
Just type stats
at the blank prompt; if it's working you'll get a load of output.
Solution 2:
I believe the socket will need to be world executable, not writable. If your seeing a PHP notice message containing errno=32 Broken pipe, adjust Memcached access mask to 0755
-s /path/to/memcache.socket
-a 0755
Also verify that Drupal's Memcached daemon has TCP port of 0
in the configuration. An unset port will default to 11211
, and confuse the socket connection.
$conf += array(
'memcache_servers' => array(
'unix:///path/to/memcache.socket:0' => 'default',
)
);