Memcached

為什麼 Memcached 不能與 vBulletin 一起使用?

  • August 4, 2011

我已經配置並設置了 Memcached,以便在 Gentoo Linux 32 位 Linode VPS 上使用 vBulletin 4.1.5。啟動includes/config.phpmemcached,配置使用memcache,站點確實載入執行正常;但是,Memcached 似乎沒有記憶體,或者至少記憶體得很好。所有服務、Apache、MySQL 和 Memcached 都執行在同一台伺服器上:

# for service in apache2 memcached mysql; do service $service status; done
* status: started
* status: started
* status: started

請參閱下面顯示記憶體使用率低的psmem輸出:

$ 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

找到了解決方案——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

鑑於裸 memcached 程序使用超過 1MB 的記憶體,我會說這psmem是在告訴小豬。而且,鑑於腳本的頂部明確表示要查看RAM使用情況,而不是記憶體使用情況,我會說您認為的情況並非如此。另一方面,記憶體中目前有 35 個項目,您並沒有完全撕毀那裡的東西。

至於為什麼 vBulletin 不使用它,我不知道;到目前為止,我已經成功地避免了這種堆積,我很高興能保持這種狀態。有更好的方法來驗證它是否有效,而不是你迄今為止一直在使用的方法(tcpdump -i lo port 11211strace -etrace=network立即浮現在腦海中),但如果它實際上並沒有按照你的意願行事,你可能不得不利用他們大肆吹噓的支持到。

引用自:https://serverfault.com/questions/296146