我已经配置并设置了 Memcached,使其可以在 Gentoo Linux 32 位 Linode VPS 上与 vBulletin 4.1.5 配合使用。Memcached 已启动,includes/config.php
配置为使用 memcache,并且站点确实加载并正常运行;但是,Memcached 似乎没有缓存,或者至少缓存得不是很好。所有服务(Apache、MySQL 和 Memcached)都在同一台服务器上运行:
# for service in apache2 memcached mysql; do service $service status; done
* status: started
* status: started
* status: started
参见下面的输出内存显示内存使用率低:
$ psmem | grep memcached
928.0 KB + 27.0 KB = 955.0 KB memcached
下面是includes/config.php
DataStore 配置部分:
$ grep DATASTORE config.php -A16
// ****** DATASTORE CACHE CONFIGURATION *****
// Here you can configure different methods for caching datastore items.
// vB_Datastore_Filecache - for using a cache file
//$config['Datastore']['class'] = 'vB_Datastore_Filecache';
// vB_Datastore_Memcached - for using a Memcache server
// It is also necessary to specify the hostname or IP address and the port the server is listening on
$config['Datastore']['class'] = 'vB_Datastore_Memcached';
$i = 0;
// First Server
$i++;
$config['Misc']['memcacheserver'][$i] = '127.0.0.1';
$config['Misc']['memcacheport'][$i] = 11211;
$config['Misc']['memcachepersistent'][$i] = true;
$config['Misc']['memcacheweight'][$i] = 1;
$config['Misc']['memcachetimeout'][$i] = 1;
$config['Misc']['memcacheretry_interval'][$i] = 15;
memcache.ini
中的配置,/etc/php/apache2-php5.3/ext-active/memcache.ini
它symlink
是/etc/php/apache2-php5.3/ext/memcache.ini
:
/etc/php/apache2-php5.3/ext-active $ cat memcache.ini
extension=memcache.so
memcache.allow_failover=false
memcache.max_failover_attempts=20
memcache.chunk_size=32768
memcache.default_port=11211
memcache.hash_strategy=consistent
memcache.hash_function=crc32
memcache.redundancy=1
memcache.session_redundancy=2
memcache.protocol=ascii
最后,Perl 脚本的输出(不是我编写的)允许将数据传递给 Cacti 用于绘图目的,但也可以手动使用:
$ perl memcached.pl localhost
total_items:898515 get_hits:20219203 uptime:3376080 cmd_get:23939667 time:1312170243 bytes:97280 curr_connections:35 connection_structures:55 bytes_written:102512934173 limit_maxbytes:67108864 cmd_set:1986754 curr_items:35 rusage_user:120.625662 get_misses:3720464 rusage_system:624.975989 bytes_read:3518914943 total_connections:28161
最后的输出看起来像是缓存,但正如之前发布的,它甚至没有使用 1 MB 的存储空间。
我是否遗漏了什么?我还应该检查什么?如果 Memcached 或相关的 PHP 扩展配置没有问题,那么这一定是 vBulletin 的问题,因为它没有以应有的方式主动使用缓存。
有想法吗?有疑问吗?几个月来我一直在尝试实现这个功能。
还运行了 Perl 脚本并将其与 进行了比较echo "stats" | nc -w 1 localhost 11211
,如建议的那样:
$ perl memcached.pl localhost | cut -d" " -f1 ; awk -F"STAT " '/total_items/{print $2}' <(echo "stats" | nc -w 1 localhost 11211)
total_items:923792
total_items 923792
答案1
找到了解决方案 - memcached 正在监听 0.0.0.0;更改为 127.0.0.1 并重新启动后,内存使用量立即显著增加,并且还在继续攀升:
$ ps u -C memcached
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
103 27999 0.0 2.3 62196 18288 ? Ssl 16:30 0:00 /usr/bin/memcached -d -p 11211 -U 11211 -l 127.0.0.1 -m 64 -c 1024
答案2
鉴于裸 memcached 进程使用超过 1MB 的内存,我认为这psmem
是骗人的。而且,鉴于脚本顶部明确指出它查看内存使用,不是记忆使用情况,我认为您认为的情况并非如此。另一方面,缓存中目前有 35 个项目,您并没有真正破坏那里的东西。
至于为什么 vBulletin 不使用它,我不知道;到目前为止,我已经成功避免了这种堆积,而且我很高兴保持这种状态。有比你迄今为止使用的方法更好的方法来验证它是否有效(tcpdump -i lo port 11211
并且strace -etrace=network
立即浮现在脑海中),但如果它实际上没有按照你想要的方式工作,你可能不得不利用他们备受吹捧的支持。