如何设置 memcached 以使用 unix socket?

alf*_*ish 14 memcached socket

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

从我读过的内容来看,我知道我需要创建一个memcache.socket并添加:

-s /path/to/memcache.socket
-a 0766
Run Code Online (Sandbox Code Playgroud)

为了/etc/memcached.conf进出默认连接端口评论和IP,即

-p 11211 
-l 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

但是,当我重新启动 memcached 时,我在 Drupal 站点上收到内部服务器错误。

我正在尝试实现 unix 套接字以避免 TCP/IP 开销并提高整体 memcached 性能,但不确定这种调整可以带来多少性能提升。

我感谢您的提示或可能的配置来解决此问题。

Syn*_*hro 13

您可能会发现仅设置套接字路径不起作用。Memcached 在创建套接字之前放弃特权,但在写入其 PID 之后。通常将套接字放入/var/run(例如,就像 mysql 那样),但只有 root 可以在那里写入,因此创建/var/run/memcached并将其 chown 给任何人,然后设置/var/run/memcached/memcached.sock为套接字路径。将其写入也可以/tmp,但就其本质而言,可能会被废弃;坚持下去/var/run会更持久一些。

您可以通过使用 netcat 连接到它来检查它是否正常工作:

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

只需stats在空白提示下输入;如果它在工作,你会得到大量的输出。


emc*_*lle 8

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

-s /path/to/memcache.socket
-a 0755
Run Code Online (Sandbox Code Playgroud)

还要验证 Drupal 的Memcached 守护进程0在配置中有 TCP 端口。未设置的端口将默认为11211,并混淆套接字连接。

-s /path/to/memcache.socket
-a 0755
Run Code Online (Sandbox Code Playgroud)


小智 6

添加到/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
Run Code Online (Sandbox Code Playgroud)

添加到/etc/memcached.conf:

-s /var/run/memcached/memcached.sock
-a 0666
Run Code Online (Sandbox Code Playgroud)