OVH Community, your new community space.

Archivo access.log


MarcosBL
26/02/2009, 21:16
Es probable, si para cada petición generaba registro, y encima te aparecia por petición un Dummy Connection, pos imaginate. Mirate ahora logrotate, y a disfrutar : )

BoRoU
26/02/2009, 11:59
Bueno pues parece que ya está todo estabilizado...
He llegado a la conclusión que lo del el tema que me creciese de forma brutal el swap era debido a que el servidor tenia que estár editando los archivos del apache.log que tenían un tamaño muy grande, y por eso consumía muchísima ram...
Tiene sentido esto?
Voy a mirar de hacer eso para que sólo haga los logs de un determinado tamaño y que cada x tiempo lo comprima todo...

Muchísimas gracias por ayuda que me habéis dado.

Un saludo

BoRoU
23/02/2009, 13:28
Muchas gracias Marcos. Ayer antes de acostarme hice esto... que es lo que leí aquí en el foro....
SetEnvIf Remote_Addr "127\.0\.0\.1" loopback
Ahora voy a crear el index.html y a revisar esos parámetros que comentas.

Gracias maestro.
Un saludo.

MarcosBL
23/02/2009, 08:58
Revisa MinSpareServers, MaxSpareServers y MaxRequestsPerChild en tu conf de Apache, ese error es una señal interna de Apache indicándole a sus therads "es hora de morir nenes".

Otra posibilidad http://wiki.apache.org/httpd/InternalDummyConnection

Y otra, poner un index.html en la raiz del dominio, para evitar que esas llamadas se produzcan sobre un fichero dinámico.

Más info http://vdachev.net/blog/2007/02/01/a...my-connection/

BoRoU
22/02/2009, 21:58
Bueno pues parece que algo sigue sin funcionar del todo bien...
Mira lo que me acabo de encontrar hace nada....
Utilización del servidor
Carga CPU : 100 %
Carga RAM : 97 %
Carga SWAP : 99 %

Utilización de disco duro
Espacio utilizado en [ / ] : 31 %
Espacio utilizado en [ /home ] : 1 %
Procesos del servidor

Servidor en línea desde : 3 día(s) 9 hora(s) 6 minuto(s) 42 segundo(s)

Carga media ( loadavg1 ) : 69.59
Carga media ( loadavg2 ) : 65.36
Carga media ( loadavg3 ) : 65.99
Voy a revisar los logs haber que veo....:confused::confused::confused:

EDITO.
Bueno creo que ya se cual es el motivo... es porque en los logs del apache me aparecen muchísimos internal dummy conections.... Voy a itentar solucionarlo.

BoRoU
19/02/2009, 11:56
Bueno muchísimas gracias Marcos, con gente así da gusto...XD
Ya lo he conseguido poner todo y ahora como bien dices a ver que tal se comporta.

Muchísimas gracias a los 2, si necesitáis algo os intentaré ayudar en todo lo que pueda.

Ya contaré que tal va todo...
UN SALUDO.

MarcosBL
19/02/2009, 11:12
Te falta el mod_headers : )

O probablemente tengas ya instalado mod_expires y te puedas ahorrar el módulo adicional, con


# Habilita el módulo para una carpeta
ExpiresActive on
# Webs cacheadas durante 5 minutos
ExpiresByType text/html "access plus 5 minutes"
# Imágenes cacheadas durante 3 dias
ExpiresByType image/jpg "access plus 3 days"
ExpiresByType image/gif "access plus 3 days"
ExpiresByType image/jpeg "access plus 3 days"
ExpiresByType image/png "access plus 3 days"

# Los CSS 24 horas
ExpiresByType text/css "access plus 24 hours"
ExpiresByType application/x-javascript "access plus 24 hours"

# Cualquier otra cosa, 5 minutejos
ExpiresDefault "access plus 5 minutes"

BoRoU
19/02/2009, 09:20
Joer macho, que grande eres...XD
Pruebo y te comento resultado.

Gracias Marcos, por enésima vez...XD

EDITO.
Bueno pues hoy parece que estoy algo más "inspirado"...
Lo primero, el que no loguee imagenes, ya lo he puesto y se lo ha tragado bien....XD
Lo que no se deja por el momento es lo de la cache de las imágenes que me comentaba el amigo markus.... Este es el mensaje que me da al reiniciar apache....
* Restarting web server apache2 * We failed to correctly shutdown apache, so we're now killing all running apache processes. This is almost certainly suboptimal, so please make sure your system is working as you'd expect now!
... waiting Syntax error on line 148 of /etc/apache2/apache2.conf:
Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration
Voy a ver que leo al respecto...
GRACIAS.

MarcosBL
19/02/2009, 00:59
Vamos a probar asi en principio con ese
LogLevel warn
cambiado a
LogLevel error
De todas formas, tu problema es el crecimiento del access log, no del error log, por lo que te he entendido, asi que eso no te va a solucionar del todo el problema. La linea

CustomLog /home/logs/apache2/access.log combined
le dice Apache qué y donde loguear los accesos, asi que vamos a probar esta sintaxis en su lugar a ver que tal. En el /etc/apache2/sites-available/default... en lugar del

CustomLog /home/logs/apache2/access.log combined
probamos

SetEnvIf Request_URI \.gif image-request
SetEnvIf Request_URI \.jpg image-request
SetEnvIf Request_URI \.png image-request
CustomLog /home/logs/apache2/access.log combined env=!image-request
Si te da eror al levantarlo como decias, dinos cual (o te saldrá en pantalla o al menos en el error log de apache o en el /var/log/messages) y ajustamos. El error susodicho por cierto no será que no tienes el módulo setenvif cargado en tu apache ?

Eso evitará que se logueen los accesos a imágenes gif, jpg y png. Como ves, es trivial añadir más lineas para que no loguee css, js, etc, etc...

Si como dices en un sólo dia llegas a gigas de espacio consumido por este fichero, este es un buen primer paso. El segundo sería mirarte logrotate, que te comprime automáticamente todos los dias el fichero y te va guardando los últimos X dias, sé que antes comentabas de hacelo tú "a mano", pero yo casi te recomiendo logrotate, está hecho exclusivamente para eso, y lo hace muy bien.

Para lo del load, has probado simplemente con los parámetros que te pasé ?

- Pon el KeepAlive On
- Pon el KeepAliveTimeOut a 3
- Pon el MaxRequestPerChild a 10000

Pon esos, dejalo un dia, a ver que tal se porta.

Luego prueba lo que te comentaba markus a nivel de cacheado a tus clientes, el


Header set Cache-control "max-age=14400"
Otro dia más asi, a ver que tal, y luego toda la conf que te recomendó markus, y un dia más. Al menos, para mi, es ensayo y error, porque depende casi completamente de lo que use tu código, tu web, el hardware... etc, etc, no hay "fórmula mágica" por desgracia. Prueba esas 3 cosillas y a ver que tal, ya nos cuentas.

BoRoU
18/02/2009, 12:05
Gracias de nuevo Marcos.
Sí ese es el archivo de configuración del apache, que por lo que leí era igual que el httpd.conf....
Te pego lo que tengo en el default que está en /etc/apache2/sites-available/default... voy a seguir mirando por si veo alguno con lo que me comentas...

ServerAdmin postmaster@elrincondelsymbian.com

DocumentRoot /home/www/

Options FollowSymLinks
AllowOverride All


Options -Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all


ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all


ErrorLog /home/logs/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /home/logs/apache2/access.log combined

Alias /doc/ "/usr/share/doc/"

Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128


Por cierto solo tengo 1 dominio en el servidor...


EDITO, lo acabo de mirar y no he visto nada diferente....

Gracias.

MarcosBL
18/02/2009, 10:10
Se hará lo que se pueda Borou, pero, no tienes más que ese fichero de conf ? no tienes otro donde definas los vhost, y su formato de log para cada uno ? porque eso que me pegas sólo tiene el log genérico, y me imagino que dispones de un log separado por dominio, no ? o como lo tienes montado ? No quiero decirte "toca aqui" sin saber, y provocarte más problema del que ya tienes : D

Como pista, busca en

Include /etc/apache2/conf.d/
y
Include /etc/apache2/sites-enabled/

BoRoU
17/02/2009, 20:54
Bueno le hice las modificaciones que me comentasteis, en cuanto a configuración del apache2.conf y el my.cnf, y funciona más menos igual...
Como comento me estaba funcionando todo OK, hasta que de repente ayer me volvio a subir la carga de SWAP al 3% y ahí está anclada....

Luego lo que me comentas MarcoBL para que no me loguee no consigo hacerlo funcionar...
Te paso mi apache2.conf por si me puedes echar un cable...
# Configuration and logfile names: If the filenames you specify for many
# of the server's control files begin with "/" (or "drive:/" for Win32), the
# server will use that explicit path. If the filenames do *not* begin
# with "/", the value of ServerRoot is prepended -- so "/var/log/apache2/foo.log"
# with ServerRoot set to "" will be interpreted by the
# server as "//var/log/apache2/foo.log".
#

### Section 1: Global Environment
#
# The directives in this section affect the overall operation of Apache,
# such as the number of concurrent requests it can handle or where it
# can find its configuration files.
#

#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# NOTE! If you intend to place this on an NFS (or otherwise network)
# mounted filesystem then please read the LockFile documentation (available
# at );
# you will save yourself a lot of trouble.
#
# Do NOT add a slash at the end of the directory path.
#
ServerRoot "/etc/apache2"

#
# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
#
#
#
LockFile /var/lock/apache2/accept.lock
#

#


#
# PidFile: The file in which the server should record its process
# identification number when it starts.
# This needs to be set in /etc/apache2/envvars
#
PidFile ${APACHE_PID_FILE}

#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 60

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 3

##
## Server-Pool Size Regulation (MPM specific)
##

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves

StartServers 15
MinSpareServers 15
MaxSpareServers 25
MaxClients 180
MaxRequestsPerChild 1000


# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves

StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0


# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

#
# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives. See also the AllowOverride
# directive.
#

AccessFileName .htaccess

#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#

Order allow,deny
Deny from all


#
# DefaultType is the default MIME type the server will use for a document
# if it cannot otherwise determine one, such as from filename extensions.
# If your server contains mostly text or HTML documents, "text/plain" is
# a good value. If most of your content is binary, such as applications
# or images, you may want to use "application/octet-stream" instead to
# keep browsers from trying to display binary files as though they are
# text.
#
DefaultType text/plain


#
# HostnameLookups: Log the names of clients or just their IP addresses
# e.g., www.apache.org (on) or 204.62.129.132 (off).
# The default is off because it'd be overall better for the net if people
# had to knowingly turn this feature on, since enabling it means that
# each client request will result in AT LEAST one lookup request to the
# nameserver.
#
HostnameLookups Off

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a
# container, error messages relating to that virtual host will be
# logged here. If you *do* define an error logfile for a
# container, that host's errors will be logged there and not here.
#
ErrorLog /home/logs/error.log

#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn

# Include module configuration:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf

# Include all the user configurations:
Include /etc/apache2/httpd.conf

# Include ports listing
Include /etc/apache2/ports.conf

#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
# If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i
#
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

#
# Define an access log for VirtualHosts that don't define their own logfile
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined

#
# Customizable error responses come in three flavors:
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
#

#
# Putting this all together, we can internationalize error responses.
#
# We use Alias to redirect any /error/HTTP_.html.var response to
# our collection of by-error message multi-language collections. We use
# includes to substitute the appropriate text.
#
# You can modify the messages' appearance without changing any of the
# default HTTP_.html.var files by adding the line:
#
# Alias /error/include/ "/your/include/path/"
#
# which allows you to create your own set of files by starting with the
# /usr/share/apache2/error/include/ files and copying them to /your/include/path/,
# even on a per-VirtualHost basis. The default include files will display
# your Apache version number and your ServerAdmin email address regardless
# of the setting of ServerSignature.
#
# The internationalized error documents require mod_alias, mod_include
# and mod_negotiation. To activate them, uncomment the following 30 lines.

# Alias /error/ "/usr/share/apache2/error/"
#
#
# AllowOverride None
# Options IncludesNoExec
# AddOutputFilter Includes html
# AddHandler type-map var
# Order allow,deny
# Allow from all
# LanguagePriority en cs de es fr it nl sv pt-br ro
# ForceLanguagePriority Prefer Fallback
#

#
# ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
# ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
# ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
# ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
# ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
# ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
# ErrorDocument 410 /error/HTTP_GONE.html.var
# ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
# ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
# ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
# ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
# ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
# ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
# ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
# ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
# ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
# ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var



# Include of directories ignores editors' and dpkg's backup files,
# see README.Debian for details.

# Include generic snippets of statements
Include /etc/apache2/conf.d/

# Include the virtual host configurations:
Include /etc/apache2/sites-enabled/
Haber si lo puedo dejar todo OK... o por lo menos que no me toque reiniciar el servidor cada semana....XD

GRACIAS.

BoRoU
14/02/2009, 15:38
Muchísimas gracias a los 2. Como os comento el lunes me pongo al asunto....

markus
14/02/2009, 07:05
MarcosBL, lo que dices sobre el diseño de la BBDD también es algo en lo que no entré anteriormente. Las recomendaciones son genéricas y creo que válidas para el volumen de tráfico que tiene BoRoU.

Para cazar si hay algo mal diseñado en la BBDD, se puede activar el slow query log en my.cnf durante algunas horas, luego pararlo, y mirar que nos ha dejado en el log. Con los queries más sospechosos es cuestión de pasarles el EXPLAIN, y mirar si se pueden mejorar añadiendo índices, etc. Es posible que tanto en las webs de vB y Joomla tengan indicaciones sobre rendimiento, quizá ellos mismos recomienden algunos cambios.

De todos modos, optimizar un servidor implica revisar todos los aspectos del mismo. Si no tienes ningún sistema de monitorización, instálate algo tipo nagios, o webmin con sysstats, por ejemplo. Algo que te permita analizar como andas de consumo de cpu, memoria, loadavg, acceso a disco, etc.

También te recomendaría buscar guías de optimización de rendimiento de Apache, PHP, MySQL, de Linux, etc. Es la mejor manera de aprender, con eso e ir ajustando poco a poco tu equipo.

Al final, es posible que llegues a la conclusión de que conviene añadir RAM, o tener una CPU más potente, por ejemplo, pero cuando se llega a eso, si no tienes claro el motivo puede que se convierta en una historia que nunca se acaba.

MarcosBL
13/02/2009, 22:40
Lo que te dice markus va en el apache conf, igual que lo que te decia yo de los keepalive.

Lo de que no loguee los accesos a imágenes, depende de tu conf, pero lo lógico es meterlo en el vhost correspondiente. Busca o similar.


-----------------------------------------------------------------


Lo de MySQL no me meto porque jamás he tenido un vbulletin y no tengo ni idea de lo depuradas que son las consultas que hace, los indices que tiene, etc... sin saber si las consultas hacen consultas en disco, si tienen indices en ram o disco, si usas myisam o innodb, no me atrevo a recomendarte nada, salvo lo ya comentado y que ya tienes de la query cache.


-----------------------------------------------------------------


Respecto a lo de josu, guardo en el servidor los de los últimos 30 dias, el resto va tirando millas para mi oficina todos los dias por ftp, el del dia 31 se transfiere por ftp mediante un sh por cron, que en cuanto acaba de transferir con éxito, borra el 31. No los borro con logrotate, amos, sólo los comprimo con eso, es cron el que se encarga de transferirlos y borrar el >30 por ahorrar espacio, amos. Aún asi, tiene mucha lógica lo que indicas, y lo comento un poco más : D

Por un lado la ley (siempre supuestamente, porque no está nada claro) te obliga a guardar los logs de Apache durante X años, por otro la Agencia española de protección de datos ha emitido un informe jurídico por el que considera que la dirección IP, por sí sola, constituye un dato de carácter personal y que, por tanto, los titulares de las páginas que almacenen este dato tendrán que registrar el fichero correspondiente. El incumplimiento de esta obligación puede ser sancionado con multas de más de 300.000 Euros en caso de considerarse infracción grave. Eso nos dejaría en una situación curiosa (que tampoco tengo muy claro que se esté aplicando, ojo), porque la ley, indirectamente, nos obliga a registrar un fichero en la AGPD "por cojoncillos" : D


-----------------------------------------------------------------


Aún podemos ir más lejos: La ley 25/2007 obliga a las compañías de telecomunicaciones a conservar y proteger y, en su caso, ceder previa orden judicial a las Fuerzas y Cuerpos de Seguridad del Estado, el personal del Centro Nacional de Inteligencia y los funcionarios de la Dirección Adjunta de Vigilancia Aduanera los datos de tránsito o tráfico y datos de localización. Ambos tipos de datos son generados con ocasión de la prestación de servicios o la explotación de redes de comunicaciones electrónicas, los cuales pueden ser cruzados con los datos de identificación de los usuarios y abonados, siendo posible por tanto calificarlos como datos de carácter personal. ¿ Es a esta ley a la que te referías ? en ella se menciona, para empresas de telecomunicaciones exclusivamente, "El nombre y dirección del abonado o del usuario registrado al que se le ha asignado en el momento de la comunicación una dirección de Protocolo de Internet (IP), una identificación de usuario o un número de teléfono."

Se habló de todo esto mucho, y a fondo, hace cuatro años, la agpd, y en europa se posicionaban también por ese lado. Más info:

http://arstechnica.com/old/content/2...-in-europe.ars
http://www.msnbc.msn.com/id/22770682/
http://www.kriptopolis.org/la-apd-co...a-direccion-ip


-----------------------------------------------------------------


La LSSICE por su parte, a este respecto no contempla la obligación de conservar los datos a los meros prestadores de servicios de la sociedad de la información, sino que esta obligación viene impuesta únicamente a los que se establece en el artículo 12 LSSICE:

"1.Los operadores de redes y servicios de comunicaciones electrónicas, los proveedores de acceso redes de telecomunicaciones y los prestadores de servicios de alojamiento de datos deberán retener los datos de conexión y tráfico generados por las comunicaciones establecidas durante la prestación de un servicio de la sociedad de la información por un período máximo de doce meses ,en los términos establecidos en este artículo y en su normativa de desarrollo."

Más info: http://tecnoquetecnocampus.blogspot....i-ip_1318.html



-----------------------------------------------------------------


Ley de obligación de conservación de datos:
http://www.scribd.com/doc/487699/BOE...acion-de-datos
http://www.invenia.es/boe:iberlex:2007.18243
http://www.asesorutil.com/conservaci...os-personales/


-----------------------------------------------------------------

Como veis, esto es un mundo que creo que ni un buen abogado podría aclararnos del todo, porque ni siquiera la legalidad es muy clara, por lo que se sabe, hoy por hoy tanto te pueden exigir las ips por ley, como te pueden denunciar por guardarlas (si no informas al usuario de que son guardadas, cosa que cuando el usuario lea, será tarde, porque su visita ya ha sido logueada en Apache). ¡ UNA FIESHHTA !



-----------------------------------------------------------------


Otro extra, obligar a Apache a guardar la IP real de los visitantes, usen o no proxy, siempre que el proxy sea legal (no transparente):
http://www.propiedadprivada.com/obli...isitantes/843/


-----------------------------------------------------------------

Y perdonad el ladrillo... : )

BoRoU
13/02/2009, 20:39
Cita Publicado inicialmente por markus
Cosas que me parece tienes demasiado altas en my.cnf y que bajaría un poco, aunque falta saber cuanta RAM tienes, qué volumen de tráfico gestionas (cuantos usuarios concurrentes), o si sólo tienes el vB aquí:

max_connections = entre 100 y 200. Ahora tienes 500, y eso es muchísimo.

thread_cache_size = 32 o quizá un poquito más, pero no tanto como 384 que tienes ahora.

query_cache_size = 32M. Ahora tienes 144M y seguramente es demasiado. Esto lo puedes monitorizar desde phpMyAdmin, en las variables de estado. Mira en el manual de MySQL, que ahí indica como funciona. Hay que mirar el nivel de reutilización del query cache, etc.


En el Apache tocaría:

MaxKeepAliveRequests 50 ...cuanto más alto, mejor rendimiento, pero a costa de memoria, y si consumimos demasiada memoria, entonces corremos el riesgo de generar paginación, y eso hunde el servidor en la miseria.

Timeout 60 para que reutilice antes la memoria.

MaxClients 100 o incluso menos. Todo depende de cuantos usuarios tengas concurrentes y lo pesadas que sean las páginas.

Otra cosa que puedes hacer es forzar cabeceras de cache alto para las imágenes que normalmente no cambian nunca, o casi nada. Mírate el mod_headers de Apache. Puedes usar la cabecera max-age. Por ejemplo:

Código:

  Header set Cache-control "max-age=14400"
De todos modos, es cuestión de revisarlo todo poco a poco. No es sencillo, pero es cuestión de ponerse, mirarse los manuales, buscar guías de optimización, etc. Claro que siempre está la opción de ampliar ram, o lo que sea.
wow, muchas gracias markus...
Haber de ram tengo 3 gigas, usuarios suelo tener una media de 450 conectados online, con picos de 650 usuarios online.
Tengo vbuletin, y joomla como portada.

Haber si me pongo el lunes con todo esto...XD
Ayer reinicié el servidor, y lo de la carga de SWAP se ha ido...XD

Lo que me comentas de forzar las cabeceras de cache como lo hago?? que es editar una archivo tambien no?

GRACIAS

josu
13/02/2009, 10:37
Cita Publicado inicialmente por MarcosBL
Lo normal no es ni tirarlo sni llevarselos a otro servidor, sino simplemente hacer rotación de los logs, cada dia po rlo normal el log del dia se comprime en un tar.gz de forma automática, y se guardan los tar.gz de los ultimos 30 dias.
uy uy uy... más vale que no tengáis ninguna demanda sobre algún "comentario" vertido en vuestros servidores. La ley obliga a mantener estos los logs un "ratito" más, y como venga un juez pidiéndolos y no los tengáis disponibles, vais a tener que hipotecar la casa para pagar la multa.

agur.

markus
12/02/2009, 23:29
Cosas que me parece tienes demasiado altas en my.cnf y que bajaría un poco, aunque falta saber cuanta RAM tienes, qué volumen de tráfico gestionas (cuantos usuarios concurrentes), o si sólo tienes el vB aquí:

max_connections = entre 100 y 200. Ahora tienes 500, y eso es muchísimo.

thread_cache_size = 32 o quizá un poquito más, pero no tanto como 384 que tienes ahora.

query_cache_size = 32M. Ahora tienes 144M y seguramente es demasiado. Esto lo puedes monitorizar desde phpMyAdmin, en las variables de estado. Mira en el manual de MySQL, que ahí indica como funciona. Hay que mirar el nivel de reutilización del query cache, etc.


En el Apache tocaría:

MaxKeepAliveRequests 50 ...cuanto más alto, mejor rendimiento, pero a costa de memoria, y si consumimos demasiada memoria, entonces corremos el riesgo de generar paginación, y eso hunde el servidor en la miseria.

Timeout 60 para que reutilice antes la memoria.

MaxClients 100 o incluso menos. Todo depende de cuantos usuarios tengas concurrentes y lo pesadas que sean las páginas.

Otra cosa que puedes hacer es forzar cabeceras de cache alto para las imágenes que normalmente no cambian nunca, o casi nada. Mírate el mod_headers de Apache. Puedes usar la cabecera max-age. Por ejemplo:

Código:

  Header set Cache-control "max-age=14400"
De todos modos, es cuestión de revisarlo todo poco a poco. No es sencillo, pero es cuestión de ponerse, mirarse los manuales, buscar guías de optimización, etc. Claro que siempre está la opción de ampliar ram, o lo que sea.

BoRoU
12/02/2009, 22:59
Bueno tiro la toalla por hoy.... no de donde meter esas lineas para que no me guarde los accesos a las imágenes en el log...He probado en el apache2.conf en el defaults en el httpd.conf........ y en todos me daba fail al reiniciar el apache....

BoRoU
12/02/2009, 21:53
Muchas gracias por la ayuda Marcos.
Lo de meter el codigo para que no me guarde el log de las peticiones a imagenes, no tengo muy claro donde colocarlo, supongo que en el apache2.conf....
Se que esto es lo que tengo que añadir....
SetEnvIf Request_URI \.gif image-request
SetEnvIf Request_URI \.jpg image-request
SetEnvIf Request_URI \.png image-request
CustomLog logs/access_log common env=!image-request
Yo en mi caso el httpd.conf lo tengo en blanco y lo que modifico es el apache2.conf que es donde tengo la información.
El servidor lo tengo configurado tal cual me recomendaron los señores de vbulletin... Te paso lo que me dijeron.

Quote:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
character-sets-dir=/usr/share/mysql/charsets

[mysqld]
bind-address = 127.0.0.1
character-set-server = latin1
init-connect='SET NAMES latin1'
default-character-set = latin1
user = mysql
port = 3306
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid
log-error = /var/log/mysql/mysqld.err
basedir = /usr
datadir = /var/lib/mysql
#skip-name-resolve
safe-show-database
#old_passwords
back_log = 50
skip-innodb
max_connections = 500
key_buffer_size = 144M
myisam_sort_buffer_size = 64M
join_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 3M
table_cache = 5000
thread_cache_size = 384
wait_timeout = 20
connect_timeout = 10
tmp_table_size = 96M
max_heap_table_size = 96M
max_allowed_packet = 64M
net_buffer_length = 16384
max_connect_errors = 10
thread_concurrency = 4
concurrent_insert = 2
table_lock_wait_timeout = 30
read_rnd_buffer_size = 786432
bulk_insert_buffer_size = 8M
query_cache_limit = 6M
query_cache_size = 144M
query_cache_type = 1
query_prealloc_size = 262144
query_alloc_block_size = 65536
transaction_alloc_block_size = 8192
transaction_prealloc_size = 4096
default-storage-engine = MyISAM
max_write_lock_count = 16

[mysqld_safe]
nice = -10
open_files_limit = 8192

[mysqldump]
quick
max_allowed_packet = 16M

[myisamchk]
key_buffer = 384M
sort_buffer = 64M
read_buffer = 16M
write_buffer = 16M
If you get mysql server gone away error messages, then keep increasing wait_timeout value in my.cnf by 60 second increments, then restart mysql after my.cnf changes for it to take effect. Test for a few days and see if you get less or eliminate that error message. If it still occurs, then keep repeating the 60 second increment until the message goes away. Each vB forum and server will have different optimal wait_timeout values depending on your vB forum traffic patterns and server hardware specifications.

If you now have PHP 5.x and MySQL 4.1.x or 5.0.x, change in config.php for vB the db_type from mysql to mysqli
Quote:
// Valid options are mysql and mysqli, for slave support add _slave. Try to use mysqli if you are using PHP 5 and MySQL 4.1+
// for slave options just append _slave to your preferred database type.
$config['Database']['dbtype'] = 'mysqli';
3. Remove Eaccelerator or APC Cache if they're installed (check phpinfo.php url of yours to see) and instead install Xcache v1.2.1 final release or Xcache v1.2.2 http://xcache.lighttpd.net/wiki/Release-1.2.2 which seems to be a bit faster than APC Cache - http://www.vbulletin.com/forum/showthread.php?t=213267. Xcache site http://xcache.lighttpd.net/, documentation http://trac.lighttpd.net/trac/wiki/Docs and forums http://forum.lighttpd.net/forum/4

Remember to set in php.ini the values for xcache.size to 48M or 96M and for xcache.count to a value of equal to number of processor cores you have so single core cpu = 1 or single dual core cpu = 2 or single quad core cpu = 4 or dual cpus each with dual core = 4 or dual cpus each with quad core = 8. Set xcache.var.size to 3M per vB forum installed and set xcache.var.count to 1 or 2 so you'd have 3M divide by 1 or 2.

Install the xcache admin end and monitor how much memory is used and available and adjust accordingly. The size specified will be divided into the value of counts set (number of cpu cores). So for count of 4, 64MB will be split to 16MB per cpu core and xcache.count_size of 12MB will be split to 3MB per cpu core.

Now enable xcache datastore caching for each vB forum (vB 3.7.x only supported). In vB config.php file these entries

Code:

// ****** DATASTORE CACHE CONFIGURATION *****
// Here you can configure different methods for caching datastore items.
// vB_Datastore_Filecache - to use includes/datastore/datastore_cache.php
// vB_Datastore_APC - to use APC
// vB_Datastore_XCache - to use XCache
// vB_Datastore_Memcached - to use a Memcache server, more configuration below
// $config['Datastore']['class'] = 'vB_Datastore_Filecache';

// ******** DATASTORE PREFIX ******
// If you are using a PHP Caching system (APC, XCache, eAccelerator) with more
// than one set of forums installed on your host, you *may* need to use a prefix
// so that they do not try to use the same variable within the cache.
// This works in a similar manner to the database table prefix.
// $config['Datastore']['prefix'] = '';

the 2 lines you need to modify by uncommenting (removing // from beginning of line) and changing their values

from
Code:

// $config['Datastore']['class'] = 'vB_Datastore_Filecache';
// $config['Datastore']['prefix'] = '';

to
Code:

$config['Datastore']['class'] = 'vB_Datastore_XCache';
$config['Datastore']['prefix'] = 'forum1';

change forum1 to whatever you want but it must be unqiue to each of your vB forums installed on same server so forum1, forum2, forum3, forum4, forum5 for 5 different vB forums' config files.

4. Upgrade to vB 3.0.17 http://www.vbulletin.com/forum/showthread.php?t=209720 if you're on vB 3.0.xx or upgrade to vB 3.5.8 http://www.vbulletin.com/forum/showthread.php?t=221903 if you're on vB 3.5.x. Or if on vB 3.6.x, upgrade to vB 3.6.12 http://www.vbulletin.com/forum/showthread.php?t=290108.

But ultimately, the latest stable vB 3.7.4 PL1 http://www.vbulletin.com/forum/showthread.php?t=291665 or at least vB 3.7.3 PL1 is highly recommended http://www.vbulletin.com/forum/showthread.php?t=283962. You can use my method of upgrading outlined at http://www.vbulletin.com/forum/showthread.php?t=187770 which is essentially same in that you make a copy of your live database and import it into a new empty database and point vB 3.7.0 config.php to that new imported database name, so you essentially do an upgrade on a copy of your database, leaving original database intact in case of any problems. This method also allows you to run the original database on a different directory so to run both original forum/database along side the upgraded forum/database so you can easily revert all changed templates on upgraded forum and then using old forum/database transfer or port your custom style/images etc to the new upgrade database.

Read each versions listed thread to understand the changes that have occured etc.

5. If you just upgraded to vB 3.5.x/3.6.x try to disable these 4 options:

Admin CP -> vBulletin Options -> Forums Home Page Options -> Display Logged in Users?

Admin CP -> vBulletin Options -> Forum Display Options (forumdisplay) -> Show Users Browsing Forums

Admin CP -> vBulletin Options -> Thread Display Options -> Show Users Browsing Thread

Admin CP -> vBulletin Options -> Message Searching Options -> Automatic Similar Thread search

Or relevant sections in vB 3.7.x

6. Check phpinfo.php url to see if you have mod_gzip (Apache 1.3.x) or mod_deflate (Apache 2.x) loaded/installed (on phpinfo.php url page in browser you can do CTRL+F to bring up find prompt and type in mod_gzip or mod_deflate to quickly see). If you have either mod_gzip or mod_deflate loaded, then ensure vB admincp gzip compression is disabled since it's the same thing as mod_gzip or mod_deflate and double compression will just increase cpu loads. If you don't have mod_gzip or mod_deflate installed, then DO NOT set vB admincp gzip compression to a level higher than 1. Higher than 1, will only increase cpu loads unncessarily.

7. Edit httpd.conf values to following and restart apachee for each change to take effect

#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 300

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 3

##
## Server-Pool Size Regulation (MPM specific)
##

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves

StartServers 15
MinSpareServers 15
MaxSpareServers 25
MaxClients 180
MaxRequestsPerChild 1000
Sigo mirando cosillas...

GRACIAS

MarcosBL
12/02/2009, 21:29
Prueba esto en httpd.conf (asegúrate de estar editando el correcto, puedes tener varios):

- Pon el KeepAlive On
- Pon el KeepAliveTimeOut a 3
- Pon el MaxRequestPerChild a 10000

En MySQL (/etc/my.cnf o /etc/mysql/my.cnf por lo general), activa la query cache (en este mismo foro alguna vez he contestado cosas sobre cómo hacerlo, si no Google, es muy sencillo, apenas 3 o 4 lineas de configuración)

Obviamente, después de los cambios, reinicia ambos servicios, y a ver que tal. Si tienes muchas visitas, de nuevo te recomiendo que desatives el log de imágenes, css y js, y además, aunque eso es un poco más complejo, configures Apache para que a img, css y js les ponga unos tiempos de expire altos, de 4 o 5 dias.

Veo que además se trata de un foro vbulletin, asegúrate de ajustar las configuraciones recomendadas por la propia gente de vbulletin, dale un ojo a sus foros buscas cosas como "alto rendimiento" y similares, asegúrate que no tienes demasiados plugins inútiles instalados en el foro (un plugin de 2 lineas mal programado te tira un 4 cores más rápido que nah), y, en general, asegúrate de tenerlo siempre actualizado a su última versión, por rendimiento, y por seguridad.

Todo eso ayuda, y si no bastase, aunque ya es entrar en otro nivel de complejidad, un Squid o nginx como frontal por delante de tu apache, puede subir el rendimiento un 1000% facilmente.

BoRoU
12/02/2009, 20:44
Bueno acabo de poner el apache2.conf como venia de origen y todo sigue igual.... mismos consumos en todo.
Voy a mirar los ajustes del my.cnf aunque ahí no se muy bien que mirar....

BoRoU
12/02/2009, 20:27
Ok, muchas gracias ahora lo miraré.

Lo que también voy a mirar es lo del tema de que no me incluya en el access las imágenes....


GRACIAS

markus
12/02/2009, 19:04
Para rotar los logs: man logrotate

Lo del swap, es posible que tengas sobredimensionados algunos parámetros del Apache. Mírate en el manual parámetros del tipo MaxClients, MaxRequestsPerChild, etc.

Puedes bajar el valor que tengas en MaxClients, reiniciar apache, y observar qué pasa con el uso de la memoria.

También tendrías que revisar cualquier otra cosa que se esté ejecutando en ese equipo. Por ejemplo, si tienes servicios arrancados que no se usan realmente, etc. Si tienes MySQL aquí también, entonces revisar y ajustar el my.cnf, ...

BoRoU
12/02/2009, 18:42
Si, lo que haré será hacerme un cron para que me guarde los logs de x tiempo comprimidos...

El tema de lo del SWAP sabéis porque es?

GRACIAS

markus
12/02/2009, 03:16
También te puedes instalar algo de tipo awstats para que te genere estadísticas de uso, etc.

MarcosBL
12/02/2009, 02:55
Lo normal no es ni tirarlo sni llevarselos a otro servidor, sino simplemente hacer rotación de los logs, cada dia po rlo normal el log del dia se comprime en un tar.gz de forma automática, y se guardan los tar.gz de los ultimos 30 dias. Esto es algo que puedes configurar en tu máquina sin tener que hacerlo manualmente. Y por supuesto, tambien puedes configurar apache para que no loguee ese dominio, loguee en un formato más pequeño, loguee todo menos imágenes, etc, etc... las posibilidades son infinitas.

BoRoU
12/02/2009, 00:01
Si, eso me temía que tendría que hacer...
Ok, pues me ocuparé de ellos como si de un backup de sql fuese... tendré los de 1 semanita comprimidos, y que me borre los que tengan más de 7 días...

Otra cosilla que se me pasó antes comentar... Es normal que el servidor tire de carga de SWAP? Es que en el anterior servidor creo que nunca había visto que hiciese servir el SWAP y ahora casi siempre lo usa...

Utilización del servidor
Carga CPU : 62 %
Carga RAM : 68 %
Carga SWAP : 12 %

Utilización de disco duro
Espacio utilizado en [ / ] : 34 %
Espacio utilizado en [ /home ] : 1 %
Procesos del servidor

Servidor en línea desde : 7 día(s) 5 hora(s) 10 minuto(s) 24 segundo(s)

Carga media ( loadavg1 ) : 2.48
Carga media ( loadavg2 ) : 2.19
Carga media ( loadavg3 ) : 2.41
Esto con unos 450 usuarios conectados....
Gracias por la respuesta.

Diablo48
11/02/2009, 23:27
Pues como su propio nombre indica es el fichero que guarda los accesos.
No hay solo imagenes, ahi sale la url de la imagen y desde donde se llamo, en otros casos pues habra cosas que no seran imagenes alomejor.

Si no quieres que se haga tan grande tendras que hacer un cron o algo para que lo elimine pero aun asi te recomendaria que durante unos 2 o 3 dias guardes los logs aunque sea en un servidor secundario, o que a las 12 de la noche ese archivos se renombre a otro o algo para que puedas mantener los logs de acceso por si pasa algo y necesitas tirar de ellos para ver por ejemplo quien acceso a una determinada url o algo.

Yo no los borraria a la ligera pero vamos eso ya es cosa de cada uno.

BoRoU
11/02/2009, 22:48
Hola, una cosultilla de algo que no le he encontrado solución, o explicación...
El caso es que el archivo access.log me crece de una manera impresionante, alcanzando en un día varios gigas... He tenido que cambiarlo y ahora en lugar de generarse en /var/log, lo he metido en /home ya que si no se me llenaba el espacio en / y se quedaba frito el servidor...Este log para que sirve? Porque me crece tanto en tan poco tiempo?

Acabo de editar uno que me acaba de generar en pocas horas de casi 200 megas y dentro solo veo que determinadas ips, ven determinadas imágenes...
Es algo así....
85.54.XXX.184 - - [11/Feb/2009:23:42:10 +0100] "GET /Foro/images/funkyfresh/buttons/collapse_thead.gif HTTP/1.1" 304 - "http://www.elrincondelsymbian.com/Foro/index.php" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)"
85.54.XXX.184 - - [11/Feb/2009:23:42:10 +0100] "GET /Foro/images/funkyfresh/misc/whos_online.gif HTTP/1.1" 304 - "http://www.elrincondelsymbian.com/Foro/index.php" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)"
85.XXX.X69.184 - - [11/Feb/2009:23:42:10 +0100] "GET /Foro/images/funkyfresh/misc/stats.gif HTTP/1.1" 304 - "http://www.elrincondelsymbian.com/Foro/index.php" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)"
No puedo comentar en el default de apache2 la linea para que no me genere el log?

GRACIAS.