為什麼 Memcached 不能與 vBulletin 一起使用?
我已經配置並設置了 Memcached,以便在 Gentoo Linux 32 位 Linode VPS 上使用 vBulletin 4.1.5。啟動
includes/config.php
memcached,配置使用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 11211
並strace -etrace=network
立即浮現在腦海中),但如果它實際上並沒有按照你的意願行事,你可能不得不利用他們大肆吹噓的支持到。