HOW TO limit memory usage in Mysql & Apache

Mi e’ capitato recentemente di dover far convivere un server web Apache e un database server Mysql su una macchina virtuale con a disposizione pochissima ram (64MB). Ovviamente tentando di far partire anche solo uno dei due applicativi con le configurazion di default non c’era verso di riuscire a tenerlo in piedi per piu’ di una manciata di secondi, quindi c’e’ bisogno di settarli in modo da fargli consumare meno memoria (ram) possibile.

Limitare l’utilizzo di memoria su Apache (1.3.x, 2.x)

Prima di tutto se utilizzate Apache2 verificate di utilizzare il modulo mpm-prefork invece di mpm-worker, in un sistema Debian based basta installare il seguente pacchetto:

aptitude install apache2-mpm-prefork

Questo modulo rende apache2 simile alla vecchia versione 1.3, che consuma meno memoria ed e’ molto piu’ stabile.

Nella configurazione dovrete cambiare alcune righe perche’ rispecchino queste configurazioni:

In apache2 le trovate in /etc/apache2/apache2.conf
In apache1.3 le trovate in /etc/apache/httpd.conf

KeepAliveTimeout 3

StartServers 1
MinSpareServers 1
MaxSpareServers 5
ServerLimit 50
MaxClients 50
MaxRequestsPerChild 5000

Limitare l’utilizzo di memoria su Mysql (4.x, 5.x)

Per entrambe le versioni di mysql bisogna modificare il file /etc/mysql/my.cf (in alcune ditribuzioni potrebbe essere in /etc/my.cnf)

Mysql 5:

[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0

[mysqld]
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

bind-address = 127.0.0.1
#
# * Fine Tuning
#
key_buffer = 16k
max_allowed_packet = 1M
thread_stack = 64K
thread_cache_size = 4
table_cache = 4

query_cache_limit = 512K
query_cache_size = 1M

log_bin = /var/log/mysql/mysql-bin.log
# WARNING: Using expire_logs_days without bin_log crashes the server! See README.Debian!
expire_logs_days = 10
max_binlog_size = 100M

# Using BerkeleyDB is now discouraged as its support will cease in 5.1.12.
skip-bdb

# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
# You might want to disable InnoDB to shrink the mysqld process by circa 100MB.
skip-innodb

[mysqldump]
quick
quote-names
max_allowed_packet = 16M

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

[isamchk]
key_buffer = 16k

#
# * IMPORTANT: Additional settings that can override those from this file!
#
!includedir /etc/mysql/conf.d/

Mysql 4:

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
# For low memory, Berkeley DB should not be used so keep skip-innodb uncommented unless required
skip-bdb
# For low memory, InnoDB should not be used so keep skip-innodb uncommented unless required
skip-innodb

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 8M
sort_buffer_size = 8M

[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
interactive-timeout

Terminate queste modifiche potrete provare a lanciare i due servezi, in teoria dovrebbero partire senza grossi problemi, ma e’ ovvio che le configurazioni apportate non permetteranno al server di gestire grandi quantita’ di traffico ne di risorse, quindi e’ buona cosa testare l’andamento dando sempre un’occhio ai log, /var/log/apache/error.log e /var/log/syslog.

Queste configurazioni vanno particolarmente bene se avete acquistato dei Linux VPS (Virtual Private Server) con molta poca ram, soluzioni per esempio come VPSLink (1 -2 -3) e Linode 256.

Oltre a queste soluzioni vi consiglio anche di utilizzare Phrel, opportunatamente configurato, per limitare l’utilizzo delle risorse da parte di IP unici che effettuano piu’ connessioni contemporanee.

Post simili:

If you enjoyed this post, please consider to leave a comment or subscribe to the feed and get future articles delivered to your feed reader.

4 Responses to “HOW TO limit memory usage in Mysql & Apache”
  1. günstige pkv
    21:32 on September 24th, 2011

    Wie viele Leute Verfassen bei euch eigentlich Texte. Das du so Mengen erstellt?

  2. Andrea
    20:43 on March 1st, 2011

    Grazie mille ;) ho recuperato circa il 10% di ram

  3. Lisa
    19:06 on April 16th, 2010

    Hi really enjoyed reading your article and was wondering i can't get memory from radio and amp won't turn on unless u run seperate wire, what can cause this?

  4. Web hosting professionale economico e praticamente gratuito
    16:53 on April 9th, 2008

    […] cosi’ come le prestazioni stesse del server, tanto ridicole che scrissi anche un post su come configurare apache e mysql per diminuire al massimo le risorse necessarie a farli partire. Tutto funziono’ per un paio di mesi poi decisi di abbandonare la […]

Leave a comment

(required)

(required)


*

Categories