Jump to content
Sign in to follow this  
Max121

Consigli su gestione memoria ram

Recommended Posts

Salve a tutti,

ho una vps con caratteristiche da peso-massimo:

 

Debian lenny 5.0.5 64 bit

100 GB di Spazio

CPU 2x Intel Xeon E5520

RAM garantita 5,120 MB

RAM condivisa 10,240 MB

ecc....

 

nonostante ciò il consumo di ram cresce giorno per giorno fino al down completo, anche ssh e servizi di rete. Sono costretto a contattare l'hosting per un semplice riavvio, visto che neanche dal pannello di virtuozzo si riavvia.

 

Analizzando il log e munin è evidente che poco prima dei down ci sono dei messaggi di errori di allocazione memoria ram e consumi elevati di ram fino a 6Gb.

 

Fino a qua non c'è niente di strano, solo che essendo abituato a server dedicati con swap un settaggio errato di apache2 o my.cnf non porta al down del server. Qui non essendoci swap avviene una reazione a catena che mi killa pian piano tutti i processi della macchina fino al down completo.

 

Come potrei risolvere il problema in modo ottimale?

 

Cioè ho già provato ad agire via configurazioni ma non c'è un settaggio globale che mi garantisce di non sforare i 5 gb.

 

Come posso fare datemi qualche dritta

grazie.

Share this post


Link to post
Share on other sites

Ferma tutti i demoni attivi sul server ed avviali poi selettivamente,un demone per volta,lasciandolo lavorare per un certo lasso di tempo.Così capirai cosa porta alla saturazione della memoria.

Share this post


Link to post
Share on other sites

ma guarda i servizi che mi occupano di più sono apache e mysql. Per i miei siti web l'uno dipende dall'altro come si fa a disattivare apache e misurare per esempio mysql? Ovvio il consumo di ram di mysql sara basso perché non ci sono richieste da apache e viceversa...

Share this post


Link to post
Share on other sites

Per quanto riguarda MySQL ci vuole un uso intensivo prima di consumare tutte le cache e i buffer disponibili come ad esempio le tabelle aperte per questo motivo ci vogliono anche parecchie ore prima che l'uso della RAM si faccia gravoso.

 

Invece Apache è affetto da grossi problemi di memory leak ossia che non rilascia del tutto la memoria quando non serve più.

Potresti passare ad un web server più efficiente oppure se usi la versione prefork di Apache, puoi usare la worker che fa uso di thread anziché processi (risparmiando memoria).

Share this post


Link to post
Share on other sites

si infatti il problema è la stabilità, grosso modo mi va in crash nel giro di 3-4 gg per colpa della ram.

 

Per quanto riguarda il traffico ho questi siti:

 

1.Wordpress 5000 Visite di picco

2.Joomla 2000 Visite di picco

3.Vbulletin 400 Visite di picco

4.altri 2 siti con Wordpress e 400 Visite di picco

 

La macchina dovrebbe reggere tranquillamente...

 

Si già utilizzo prefork e worker, a questo punto credo che i settaggio sono sbagliati...

 

Puoi darci un occhio?

 

Apache2

...
Timeout 45
KeepAlive On
MaxKeepAliveRequests 150
KeepAliveTimeout 5
...

Prefork MPM

<IfModule mpm_prefork_module>
   StartServers       8
   MinSpareServers    5
   MaxSpareServers    20
   ServerLimit       512
   MaxClients        512
   MaxRequestsPerChild   4000
</IfModule>

Worker MPM

<IfModule mpm_worker_module>
   StartServers          2
   MaxClients          150
   MinSpareThreads      25
   MaxSpareThreads      75
   ThreadsPerChild      25
   MaxRequestsPerChild  2000
</IfModule>

....
HostnameLookups Off

....

 

Ti posto anche il my.cnf

#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
# 
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]
port		= 3306
socket		= /var/run/mysqld/mysqld.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket		= /var/run/mysqld/mysqld.sock
nice		= 0

[mysqld]
#
# * Basic Settings
#
user		= mysql
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
port		= 3306
basedir		= /usr
datadir		= /var/lib/mysql
tmpdir		= /tmp
language	= /usr/share/mysql/english
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address		= 127.0.0.1
#
# * Fine Tuning
#
key_buffer		= 16M
max_allowed_packet	= 16M
thread_stack		= 192K
thread_cache_size       = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover         = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10
#
# * Query Cache Configuration
#
query_cache_limit	= 1M
query_cache_size        = 16M
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file        = /var/log/mysql/mysql.log
#general_log             = 1
#
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
#
# Here you can see queries with especially long duration
#log_slow_queries	= /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#server-id		= 1
#log_bin			= /var/log/mysql/mysql-bin.log
expire_logs_days	= 10
max_binlog_size         = 100M
#binlog_do_db		= include_database_name
#binlog_ignore_db	= include_database_name
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * InnoDB plugin
# As of MySQL 5.1.38, the InnoDB plugin from Oracle is included in the MySQL source code.
# It has many improvements and better performances than the built-in InnoDB storage engine.
# Please read http://www.innodb.com/products/innodb_plugin/ for more information.
# Uncommenting the two following lines to use the InnoDB plugin.
#ignore_builtin_innodb
#plugin-load=innodb=ha_innodb_plugin.so
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem



[mysqldump]
quick
quote-names
max_allowed_packet	= 16M

[mysql]
#no-auto-rehash	# faster start of mysql but no tab completition

[isamchk]
key_buffer		= 16M

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×