¿Tienes una pregunta?

Si usted tiene cualquier pregunta, escriba a continuación lo que está buscando!

XCACHE Magento


Bien volviendo después de un tiempo, nos topamos que nuestro servidor estaba siendo completamente agotado en el consumo de la CPU, los índices saltaban de 0% de consumo al 500% (100% era el tope), lo que nos provocaba que todos los servicios alojados en el servidor perdieran velocidad.
La culpa era de un tienda Magento muy éxitosa en visitas, 1800 visitas al día y no solo a una página estática, sino que estas 1.800 visitas recorrian muchas categorías de esta tienda, que posee más 1500 productos de alta demanda y sin nombrar a los robots de google que «chupan» mucha CPU al servidor.

La página estaba al nivel de carga «Page load Time» en 6,8 seg y bajó como promedio a 3 seg y fracción. Para que comprueben que mis palabras son reales, pueden verificarlos por ustedes mismos en: gtmetrix.com e ingresar está tienda Magento vinoswine.cl.

Lo que se hizo fue lo siguiente:

1.- Instalar Xcache versión 3.0.3

wget http://development.magento.cl/xcache-3.0.3.tar.gz
tar -zxf xcache-*.tar.gz
cd xcache-3.0.3
phpize
./configure --enable-xcache
make
make install

2.- Verás que extension=xcache.so quedó en

/usr/lib64/php/modules/extension=xcache.so

3.- Ingresar xcache.ini a tu php.ini y dejarlo de está manera (customizado por mi y funcionado bien en servidor Media Temple dv level 4.0 64 bits):
Primero respaldar nuestro php.ini

cp /etc/php.ini /etc/php.ini.bak31082013

Ahora ingresar xcache.ini

;; this is an example, it won't work unless properly configured into php.ini
[xcache-common]
;; non-Windows example:
extension = xcache.so
;; Windows example:
; extension = php_xcache.dll

[xcache.admin]
xcache.admin.enable_auth = On
;xcache.admin.user = "mOo"
xcache.admin.user = "admin"
; set xcache.admin.pass = md5($your_password)
; login use $your_password
xcache.admin.pass = "70980fdcc758341b5a9d73af096c8c78"

[xcache]
; ini only settings, all the values here is default unless explained

; select low level shm implemenation
xcache.shm_scheme =        "mmap"
; to disable: xcache.size=0
; to enable : xcache.size=64M etc (any size > 0) and your system mmap allows
xcache.size  =               260M
; set to cpu count (cat /proc/cpuinfo |grep -c processor)
xcache.count =                 1
; just a hash hints, you can always store count(items) > slots
xcache.slots =                8K
; ttl of the cache item, 0=forever
xcache.ttl   =                 0
; interval of gc scanning expired items, 0=no scan, other values is in seconds
xcache.gc_interval =           0

; same as aboves but for variable cache
xcache.var_size  =            224M
xcache.var_count =             1
xcache.var_slots =            8K
; default value for $ttl parameter of xcache_*() functions
xcache.var_ttl   =             0
; hard limit ttl that cannot be exceed by xcache_*() functions. 0=unlimited
xcache.var_maxttl   =          0
xcache.var_gc_interval =     300

; mode:0, const string specified by xcache.var_namespace
; mode:1, $_SERVER[xcache.var_namespace]
; mode:2, uid or gid (specified by xcache.var_namespace)
xcache.var_namespace_mode =    0
xcache.var_namespace =        ""

; N/A for /dev/zero
xcache.readonly_protection = Off
; for *nix, xcache.mmap_path is a file path, not directory. (auto create/overwrite)
; Use something like "/tmp/xcache" instead of "/dev/*" if you want to turn on ReadonlyProtection
; different process group of php won't share the same /tmp/xcache
; for win32, xcache.mmap_path=anonymous map name, not file path
xcache.mmap_path =    "/dev/zero"


; Useful when XCache crash. leave it blank(disabled) or "/tmp/phpcore/" (writable by php)
xcache.coredump_directory =   "/tmp/xcache"
; Windows only. leave it as 0 (default) until you're told by XCache dev
xcache.coredump_type =         0

; disable cache after crash
xcache.disable_on_crash =    Off

; enable experimental documented features for each release if available
xcache.experimental =        Off

; per request settings. can ini_set, .htaccess etc
xcache.cacher =               On
xcache.stat   =               On
xcache.optimizer =           Off

[xcache.coverager]
; enabling this feature will impact performance
; enabled only if xcache.coverager == On && xcache.coveragedump_directory == "non-empty-value"

; per request settings. can ini_set, .htaccess etc
; enable coverage data collecting and xcache_coverager_start/stop/get/clean() functions
xcache.coverager =           Off
xcache.coverager_autostart =  On

; set in php ini file only
; make sure it's readable (open_basedir is checked) by coverage viewer script
xcache.coveragedump_directory = ""

Nota fijarse que el usuario está descrito en xcache.admin.user = «admin»
y la contraseña está en md5 ingresada en xcache.admin.pass = «70980fdcc758341b5a9d73af096c8c78»
la cual debes ingresar la suya.

4.- Luego copiamos el controlador de xcache al admin de un sitio y nos vamos a la carpeta «xcache-3.0.3» (cuando la descomprimimos), y entramos:

cd xcache-3.0.3
mkdir /var/www/vhosts/tiendamagento.cl/httpdocs/xcache
cp -R htdocs/* /var/www/vhosts/tiendamagento.cl/httpdocs/xcache

5.- Ahora puedes ver como puedes controlar la cache de tus dominios a diestra y siniestra.

6.- Ahora nos vamos a Magento, que es lo que nos interesa optimizar con xcache:
Ir a app/etc/local.xml y antes de que acabe «/global» ingresamos lo siguiente:


                xcache
                database
                0
                0

7.- Después ir a app/code/core/Mage/Core/Model/Cache.php y en la línea 181 comentar «$enable2levels = true»:

case 'xcache':
                if (extension_loaded('xcache')) {
                    //$enable2levels = true;
                    $backendType = 'Xcache';
                }

Esto hay que realizarlo, porque Magento trabaja con 2 niveles de caché, las cuales no podemos controlar, y si trabajamos con APC y SERVER API cgi o fastcgi queda flor de desastre, y yo creo que Magento se equivoca en esto de recomedar APC, que alguna vez explicaré en detalle del porque no me gusta APC. Creo xcache es lo mejor que se puede utilizar para controlar de manera eficiente la cache de Magento. En el mismo tema, deben aplicar este punto 7 o sino les saldrá este error «fast_backend must implement the Zend_Cache_Backend».

8.- Ahora se darán cuenta, si van a la carpeta var/cache y borran todo lo que hay dentro, que ya no estará grabando la «ineficiente caché de Magento, según mi criterio» cuando trabajas con tiendas de alto desempeño con muchas visitas y muchas peticiones a la base datos.
Verán además que tiendamagento.cl/xcache en la sección «List Var Data» está funcionando correctamente, como así también «List PHP» donde podemos de por fin, manejar la caché de magento de una manera transparente y eficiente. Y simplemente con nuestra caché habilitada en Magento, si nos pide refrescar, lo hacemos y refresca la caché de xcache… genial!

Atte
Boris Durán R.

Commentarios

commentarios

Deje un comentario

Tu dirección de correo electrónico no será publicada. Los campos requeridos están marcados *

Puedes usar las siguientes etiquetas y atributos HTML <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>